2

チェックディジットを作成するための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アルゴリズムです。

4

1 に答える 1

5

チェックディジット文字は、たとえば、店員がキーボードを介して番号を入力したときに、入力が誤って操作されるのを防ぐように設計されています。

合計だけを使用すると、文字列「ABCD」と「ABDC」の両方で同じチェックサム( "A" + "B" + "C" + "D")が生成されるため、単純なスワップエラーが気付かれずに発生する可能性があります。

ただし、パリティを考慮すると、「ABCD」と「ABDC」は(2 "A" + "B" + 2 "C" + "D")と(2 "A" + "B" + 2"D"になります。 + "C")はそれぞれ(おそらく)異なる番号であるため、このようにして、2つの文字が誤って交換されたかどうかを検出できました。

于 2011-04-05T16:14:25.563 に答える