你知道为什么Luhn mod N 算法为了创建校验位通过将每个偶数放置的字符的值加倍而不是对所有字符进行简单的求和来执行求和吗?
在伪代码词中:
给定:
var s = "some string i want to create check digit";
你知道为什么 Luhn mod N 基本上是这样做的:
for(i from s.length-1 to 0)
if(i is even)
checkdigit += chr2int(s[i]) * 2;
else
checkdigit += chr2int(s[i]);
而不是简单地做一个总和
for(i from s.length-1 to 0)
checkdigit += chr2int(s[i]);
他们仍然可以mod
通过使校验位适合一个字符的操作来终止
return int2chr( chr2int('a') + (checkdigit mod 25) );
作为这个问题的旁注,谁可能对 Luhn 算法的图形表示感兴趣,这使得它更容易理解:
其实这个是最原始的 Luhn 算法,甚至不需要使用 MOD 函数。