Algorithm 为什么卢恩算法乘以2?
我对卢恩算法有疑问。用于错误检测和校验和数字的luhn算法(mod 10)。例如,visa、信用卡等数字 例如,我们有数字: 数字1 2 3 4 5 6 7 8 9 3 步骤1:将交替数字的值乘以2,开始 从第二个最右边的数字开始。 例子: 数字1234567893 乘法器x2x2x2x2x2 步骤2:添加上述产品的所有单个数字 加上联合国原来的两位数。如果超过10,则用9加减。 号码 例如: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
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表示奇数位置),情况就不会如此