我对Luhn算法有疑问。luhn算法(mod 10(用于错误检测和检查总和数字。例如签证、信用卡等数字。
例如我们有数字:数字 1 2 3 4 5 6 7 8 9 3
第 1 步:将备用数字的值乘以 2,从从最右边的第二个数字开始。例:数字 1 2 3 4 5 6 7 8 9 3乘数 X2 X2 X2 X2 X2
步骤2:添加上述产品的所有单个数字连同原始数字的未加倍数字。如果多 10,则加或减 9。数。
例:
Digit 1 2 3 4 5 6 7 8 9 3
Multiplier X2 X2 X2 X2 X2
Result 2 2 6 4 10 6 14 8 18 3
1+0 1+4 1+8
Sum 2+ 2+ 6+ 4+ 1+ 6+ 5+ 8+ 9+ 3 = 40
第 3 步:如果总模数 10 等于 0,则数字为根据 LUHN 公式有效;否则它是无效。例。40 mod 10 = 0 如此有效,如果不是 0,则无效。
问题是,为什么在步骤2中使用乘以2?原因是什么?(请提供链接参考或论文(。谢谢
尽管维基百科文章中没有给出这个细节的明确理由,但每两位数字的乘法可能会实现对交换相邻位置的打字错误的检测。更准确地说,提到
Luhn算法将检测[...]几乎所有相邻数字的转置。但是,它不会检测到两位数序列 09 到 90 的转置(反之亦然(。
如果相邻位置排列,则校验和可能会更改。如果没有不同的因素(2 个表示右边的偶数位置,1 个表示奇数位置(,情况就不会如此。