チェックディジットを作成するためのLuhnmodNアルゴリズムが、すべての文字の単純な合計を実行するのではなく、配置された各文字の値を2倍にすることによって合計を実行する理由を知っていますか?
擬似コードの言葉で:
与えられた:
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
チェックディジットを1つの文字に収める操作で両方を終了することもできます
return int2chr( chr2int('a') + (checkdigit mod 25) );
この質問の補足として、Luhnアルゴリズムのグラフィック表現に関心があるかもしれません。これにより、理解がさらに簡単になります。
実際、これはMOD関数を使用する必要さえないオリジナルのLuhnアルゴリズムです。