Algorithm 为什么卢恩算法乘以2?

Algorithm 为什么卢恩算法乘以2?,algorithm,checksum,credit-card,luhn,error-detection,Algorithm,Checksum,Credit Card,Luhn,Error Detection,我对卢恩算法有疑问。用于错误检测和校验和数字的luhn算法(mod 10)。例如,visa、信用卡等数字 例如,我们有数字: 数字1 2 3 4 5 6 7 8 9 3 步骤1:将交替数字的值乘以2,开始 从第二个最右边的数字开始。 例子: 数字1234567893 乘法器x2x2x2x2x2 步骤2:添加上述产品的所有单个数字 加上联合国原来的两位数。如果超过10,则用9加减。 号码 例如: Digit 1 2 3 4 5 6 7 8 9 3 Multiplier

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

例如,我们有数字: 数字1 2 3 4 5 6 7 8 9 3

步骤1:将交替数字的值乘以2,开始 从第二个最右边的数字开始。 例子: 数字1234567893 乘法器x2x2x2x2x2

步骤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模10=0,因此有效,如果不是0,则无效

问题是,为什么在第2步中使用乘2?原因是什么?(请提供链接参考或论文)。
感谢

尽管中没有给出此细节的明确理由,但每两个数字的乘法很可能实现对相邻位置交换的打字错误的检测。更准确地说,有人提到

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

如果相邻的位置被置换,校验和可能会改变。如果没有不同的系数(2表示右侧偶数位置,1表示奇数位置),情况就不会如此