Luhn算法不起作用

时间:2015-07-19 17:24:36

标签: vb.net

我在为学校写作的课程遇到了问题。我需要使用Luhn算法验证信用卡号,但是我在使算法逻辑正常工作方面遇到了一些困难。我相信我知道问题所在,但我无法修复它。

我认为问题在于:

For i = 0 To cardInput.Text.Length - 2 Step -2
    Dim x = (i * 2)
    If x > 9 Then
        x = x - 9
    End If
    oddTotal += x
Next

'Sum of undoubled digits
For i = 0 To cardLength - 1 Step -2
    evenTotal += i
Next

total = oddTotal + evenTotal

checkSum = total

infoOutput.Items.Add("CheckDigit: " & checkDigit)
infoOutput.Items.Add("CheckSum :" & checkSum)

'Verify that the card is valid by the Mod 10 (Lund algoritm)
If checkSum = checkDigit Or checkSum = 0 Then
    valid = True
Else
    valid = False
End If

如果需要,可以看到我项目的其余部分here

我的代码似乎不是从最后一位开始,而是将所有其他数字重新开始加倍。 Step -2操作符在这里不正确吗?我做错了什么?

1 个答案:

答案 0 :(得分:2)

这里有几个问题。特别:

如果你想要一个向后计数的循环,你必须从较高的索引开始,到较低的索引结束。所以:

For i = cardInput.Text.Length - 2 To 0 Step -2

然后,不应直接使用i,而应使用i - ith数字:

Dim x = Val(cardInput.Text(i))

这同样适用于你的平均数。

如果要检查最后一位数是否为零,请使用Mod运算符:

valid = (checkSum Mod 10 = 0)