2

我对 Luhn 算法有疑问。用于错误检测和校验和数字的 luhn 算法 (mod 10)。例如签证、信用卡等数字。

例如我们有数字:Digits 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

Step2:将上述产品的所有单个数字与原始数字中的未加倍数字相加。如果更多 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?什么原因?(请提供链接参考或论文)。谢谢

4

1 回答 1

3

尽管在Wikipedia 文章中没有给出这个细节的明确理由,但每隔一个数字的乘法可能会实现对相邻位置交换的打字错误的检测。更准确地说,它提到了

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

如果相邻位置被置换,则校验和可能会改变。如果没有不同的因素(右边的偶数位置为 2,奇数位置为 1),情况就不会如此。

于 2017-02-07T07:39:41.247 回答