本人在做信用卡卡号验证的时候遇上了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算法到底是本来就只有一种还是就是有好几个版本?