我正在尝试实现信用卡号的简单验证。我 在维基百科上 读到了 Luhn 算法:
- 从最右边的校验位开始向左移动,每第二位的值加倍。
- 将乘积的数字(例如,10: 1 + 0 = 1、14: 1 + 4 = 5)与原始数字的未加倍数字相加。
- 如果总模 10 等于 0(如果总和以零结尾),则根据 Luhn 公式该数字有效;否则无效。
在维基百科上,Luhn 算法的描述非常容易理解。但是,我还在 Rosetta Code 和 其他地方(已存档)看到了 Luhn 算法的其他实现。
这些实现工作得很好,但我对为什么他们可以使用数组来完成工作感到困惑。他们使用的数组似乎与Luhn算法无关,我看不出他们是如何实现维基百科上描述的步骤的。
他们为什么使用数组?它们有什么意义,它们如何用于实现维基百科描述的算法?
原文由 Mithril 发布,翻译遵循 CC BY-SA 4.0 许可协议
数组
[0,1,2,3,4,-4,-3,-2,-1,0]
用作查找数组,用于查找 0-9 中的数字与其值的 2 倍数字和之间的差异。例如,对于数字 8,8 和 (2*8) = 16 -> 1+6 = 7 之间的差是 7-8 = -1。这是图形表示,其中 {n} 代表 n 的数字的总和
您列出的算法只是对所有数字求和,对于每个偶数点数字,使用数组查找差异,并将其应用于总和。