为什么Luhn算法乘以2?

时间:2017-02-07 07:09:34

标签: algorithm checksum credit-card luhn error-detection

我对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或减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?是什么原因? (请链接参考或论文)。 感谢

1 个答案:

答案 0 :(得分:3)

虽然在Wikipedia article中没有明确说明这个细节的原因,但是每隔一个数字的乘法可能会实现对相邻位置交换的输入错误的检测。更确切地说,提到

  

Luhn算法将检测几乎所有相邻数字的转置。但是,它不会检测到两位数序列09到90的转换(反之亦然)。

如果相邻位置被置换,则校验和可能会发生变化。没有不同的因素(对于偶数位置为2,对于奇数位置为1),情况并非如此。