信用卡验证的Luhn算法是否唯一

勿腻阳 2008-10-29 04:17:17
本人在做信用卡卡号验证的时候遇上了Luhn算法,但是从百度和谷歌搜索的情况都不很理想,关键问题都没有说的很清楚,所以还是请CSDN上的高手们给予指点。
一种情况说的是
luhn算法,就是从个位(第一位)开始,隔一位(下一个是百位)的数字(即奇数位)相加,从十位(第二位)开始,隔一位(下一个是千位)的数字(即偶数位)乘以2得到的数字如果大于9则减去9得到的数字相加,把这两个和的结果的相加,如果是10的倍数则是正确地卡号。

第二种说法:
Luhn算法:

1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

2、将偶数位数字相加,但是这里有个麻烦。必须先将数字乘以2,如果结果是两位数,将两个位上数字相加。然后将这些结果加入总和中。

3、将奇数位总和加上偶数位总和,如果信用卡号码是合法的,结果应该可以被10整除。

例如有卡号:5432123456788881
奇数位 4 2 2 4 6 8 8 1 和 35
偶数位 5 3 1 3 5 7 8 8
偶数位乘2:10 6 2 6 10 14 16 16
两数位相加 1 6 2 6 1 5 7 7 和 35
总和:70,可以被10整除,合法卡号。

用第二种说法(即偶数位乘2即使大于9也不减去)也正确,但是其中红色的数值明显还是减去了9之后得到的结果,并且晚上有各种不同版本的Luhn算法,虽然都正确但是还是想请教各位一下,Luhn算法到底是本来就只有一种还是就是有好几个版本?
...全文
723 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
勿腻阳 2008-10-30
  • 打赏
  • 举报
回复
呵呵!有道理很正确,问题解决,谢谢谢谢,这就加分去!
allen_feng 2008-10-30
  • 打赏
  • 举报
回复
这二个不都一样么,大于9则减9和 是二位数则把十位上的数加上个位上的数 这二种都一样啊,只是说法不同
danjiewu 2008-10-30
  • 打赏
  • 举报
回复
一个数字乘2如果得到的是两位数那肯定是1*的,1*的数减去9也和2个数字相加是一回事。
bag_19830321 2008-10-30
  • 打赏
  • 举报
回复
支持一下
学习
等待高手
lya121 2008-10-29
  • 打赏
  • 举报
回复
未曾相识的算法。

先瞧瞧

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧