【发布时间】:2011-04-05 16:07:58
【问题描述】:
您知道为什么Luhn mod N algoritm 会通过将每个偶数放置的字符的值加倍而不是对所有字符进行简单求和来执行求和吗?
用伪代码的话:
给定:
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函数。
【问题讨论】:
标签: algorithm checksum check-digit