为什么 Luhn 算法乘以 2



我对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 个表示奇数位置(,情况就不会如此。

相关内容

  • 没有找到相关文章

最新更新