エラー検出において、Dammアルゴリズムは、すべての1桁のエラーとすべての隣接転置エラーを検出するチェックデジットアルゴリズムです。これは、H. Michael Dammが2004年に発表したもので、 [ 1 ]彼の博士論文「完全反対称準群」の一部として発表されました。
Damm アルゴリズムはVerhoeff アルゴリズムに似ています。これも、最も頻繁に発生する 2 種類の転記エラー、つまり 1 つの数字の変更または隣接する 2 つの数字の転置 (末尾のチェック 数字と前の数字の転置を含む) のすべての発生を検出します。[ 1 ] [ 2 ] Damm アルゴリズムの利点は、Verhoeff スキームのように専用に構築された順列と位置固有のべき乗を持たないことです。また、演算表のすべての主対角エントリがゼロの場合、逆数の表を省略することもできます。
Dammアルゴリズムは10個の可能な値のみを生成するため、数字以外の文字(例えば、10桁のISBNチェックデジット方式におけるXなど)を使用する必要がなくなります。
先頭にゼロを追加してもチェックデジットには影響しません(可変長コードの弱点)。[ 1 ]
英語に関連するすべての音声エラーを検出する、完全に反対称な準群が存在する(13 ↔ 30、14 ↔ 40、...、19 ↔ 90)。例示に使用されている表は、そのような準群の一例に基づいている。
Dammアルゴリズムを含むすべてのチェックサムアルゴリズムでは、先頭にゼロを追加してもチェックデジットに影響はありません[ 1 ]。したがって、1、01、001などはすべて同じチェックデジットを生成します。そのため、可変長コードは一緒に検証すべきではありません。
その本質的な部分は、弱完全反対称であるという特別な特徴を持つ位数10の準群(すなわち、演算表の本体として10 × 10ラテン方陣を持つ) である。[ 3 ] [ 4 ] [ i ] [ ii ] [ iii ]ダムは、位数 10 の完全反対称準群を作成するいくつかの方法を明らかにし、博士論文でいくつかの例を示した。[ 3 ] [ i ]これにより、ダムは位数 10 の完全反対称準群は存在しないという古い予想も否定した。[ 5 ]
準群( Q , ∗)は、すべてのc , x , y ∈ Qに対して次の含意が成り立つ場合、完全に反対称であると呼ばれる。 [ 4 ]
そして、最初の含意のみが成り立つ場合、それは弱完全反対称と呼ばれます。Damm は、n位の完全反対称準群の存在は、 n位の弱完全反対称準群の存在と同等であることを証明しました。チェック方程式 (...((0 ∗ x m ) ∗ x m −1 ) ∗ ...) ∗ x 0 = 0を用いた Damm アルゴリズムでは、 x ∗ x = 0の性質を持つ弱完全反対称準群が 必要です。このような準群は、すべてのゼロが対角線上に位置するように列を並べ替えることによって、任意の完全反対称準群から構築できます。また、一方で、最初の行が自然な順序になるように列を並べ替えることによって、任意の弱完全反対称準群から完全反対称準群を構築できます。[ 3 ]
チェックデジットを含む数字列の有効性は準群上で定義されます。すぐに使用できる準群表は、Damm の博士論文 (98、106、111 ページ) から入手できます。[ 3 ]各主対角要素が0 である場合、[ 1 ]チェックデジットの計算が簡略化されるため便利です。
前提条件:表の主対角線上の要素は0です。
以下の演算表を使用します。[ 1 ]これは、Dammの博士論文111ページ[ 3 ]にある完全反対称準群x ∗ yから、行を並べ替え、エントリを置換φ = (1 2 9 5 4 8 6 7 3)に変更し、 x ⋅ y = φ − 1 ( φ ( x ) ∗ y )と定義することによって得られます。
572という数字(数字列)を選んだとしましょう。
結果として得られる中間桁は4です。これが計算されたチェックデジットです。これを数値に付加すると5724になります。
結果として得られる中間桁は0なので、その数値は有効です。
これは、チェックデジット(青い点線の矢印)を生成するアルゴリズムの詳細と、チェックデジットを使用して数値572を検証する様子を示す上記の例です。
![]()