首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luhn算法无效

Luhn算法无效
EN

Stack Overflow用户
提问于 2015-07-19 17:24:35
回答 1查看 702关注 0票数 0

我在为学校写的程序中遇到了一个问题。我需要验证信用卡号码使用Luhn算法,但我有一些困难,使该算法的逻辑正确工作。我相信我知道问题出在哪里,但我无法解决。

我相信问题在于:

代码语言:javascript
复制
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

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

我的代码似乎没有从最后一个数字开始,并将每一个其他数字恢复到开始时翻了一番。这里的步骤2操作符不正确吗?我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-19 17:44:55

这里有几个问题。特别是:

如果希望循环向后计数,则必须从较高的索引开始,在较低的索引处结束。所以:

代码语言:javascript
复制
For i = cardInput.Text.Length - 2 To 0 Step -2

然后,与其直接使用i,不如使用i-ith数字:

代码语言:javascript
复制
Dim x = Val(cardInput.Text(i))

同样的情况也适用于你的均数之和。

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

代码语言:javascript
复制
valid = (checkSum Mod 10 = 0)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31503882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档