チェックディジット
チェックディジットは、銀行口座番号などの識別番号のエラー検出に使用される冗長チェックの形式であり、少なくとも時々手動で入力されるアプリケーションで使用されます。これは、コンピューターで生成されたデータのエラーをチェックするために使用されるバイナリパリティビットに類似しています。これは、シーケンス入力の他の数字(または文字)からアルゴリズムによって計算された1つ以上の数字(または文字)で構成されます。
チェックディジットを使用すると、1つのタイプミスした数字や、2つの連続する数字の順列など、一連の文字(通常は数字)の入力で単純なエラーを検出できます。
デザイン
チェックディジットアルゴリズムは、通常、人間の 文字起こしエラーをキャプチャするように設計されています。複雑な順に、これらには次のものが含まれます。 [1]
- l→1またはO→0などの文字/数字のエラー
- 1→2などの1桁のエラー
- 12→21などの転置エラー
- 11→22などのツインエラー
- 132→231などのジャンプ転置エラー
- 131→232などのジャンプツインエラー
- 60→16(「60」から「16」)などの音声エラー
システムを選択する際、エラーをキャッチする可能性が高いことは、実装の難しさと引き換えになります。単純なチェックディジットシステムは、人間が簡単に理解して実装できますが、実装に高度なプログラムを必要とする複雑なシステムほど多くのエラーをキャッチしません。
望ましい機能は、ゼロを左パディングしてもチェックディジットが変更されないことです。これにより、可変長の数値を使用したり、長さを変更したりできます。元の番号に1つのチェックディジットが追加されている場合、システムは2つの置換エラー(12→34)などの複数のエラーを常にキャプチャするとは限りませんが、通常、2つのエラーは90%の確率でキャッチされます(両方の変更は金額を相殺して出力を変更する必要があります)。
非常に単純なチェックディジットの方法は、10を法とするすべての桁の合計(デジタル合計)を取得することです。これにより、1桁のエラーがキャッチされます。このようなエラーは常に合計を変更しますが、転置エラー(スイッチング)はキャッチしません。 2桁)並べ替えても合計は変わりません。
もう少し複雑な方法は、数字の位置ごとに異なる重みを使用して、10を法とする数字 の重み付き合計を取得することです。
これを説明するために、たとえば、4桁の数字の重みが5、3、2、7で、コード化される数字が4871の場合、5×4 + 3×8 + 2×7 + 7×1が必要になります。 = 65、つまり10を法として65であり、チェックディジットは5であり、48715になります。
重みが1、3、7、または9で、隣接する数値の重みが異なるシステムが広く使用されています。たとえば、UPCコードでは31 31の重み、 EAN番号では13 13の重み(GS1アルゴリズム)、371米国の銀行ルーティングトランジット番号で使用される371371ウェイト。このシステムは、すべての1桁のエラーと、転置エラーの約90%を検出します。1、3、7 、および9は互いに素であるため、使用されます10の場合、任意の桁を変更するとチェックディジットが変更されます。2または5で割り切れる係数を使用すると、情報が失われ(5×0 = 5×2 = 5×4 = 5×6 = 5×8 = 0を法として10であるため)、1桁のエラーをキャッチできません。隣接する数値に異なる重みを使用することは、ほとんどの転置がチェックディジットを変更することを意味します。ただし、すべての重みが偶数で異なるため、2と9であるため、5(0と5、1と6、2と7、3と8、4と9)だけ異なる2桁の転置はキャッチされません。 5を掛けると10になります。
ISBN-10コードは、代わりに素数であるモジュロ11を使用し、すべての数値位置の重みは1、2、... 10です。したがって、このシステムは、すべての1桁の置換および転置エラー(ジャンプ転置を含む)を検出しますが、チェックディジットのコストは、「X」で表される10である可能性があります。(別の方法は、「X」チェックディジットになるシリアル番号の使用を避けることです。)ISBN-13は、代わりにEAN番号で使用されるGS1アルゴリズムを使用します。
より複雑なアルゴリズムには、1桁の転置エラーの98%をキャプチャするLuhnアルゴリズム(1954)(90↔09を検出しない)や、すべての1桁の置換および転置エラーをキャッチするさらに洗練されたVerhoeffアルゴリズム(1969)が含まれます。そして、多くの(すべてではない)より複雑なエラー。同様に、別の抽象代数ベースの方法であるDammアルゴリズムもあります。(2004)、それもすべての1桁のエラーとすべての隣接する転置エラーを検出します。これらの3つの方法では、1つのチェックディジットを使用するため、より複雑なエラーの約10%をキャプチャできません。この失敗率を減らすには、複数のチェックディジットを使用する必要があります(たとえば、以下で参照するモジュロ97チェックディジット。2つのチェックディジットを使用します。アルゴリズムについては、国際銀行口座番号を参照してください)。チェックディジット内のより広い範囲の文字(文字と数字など)。
例
UPC
Universal Product Codeの最後の桁は、次のように計算されるチェックディジットです。[2]
- 右から奇数の桁(1、3、5など-チェックディジットを除く)を足し合わせ、3を掛けます。
- 結果に偶数の位置(2番目、4番目、6番目など)の数字(チェックディジットまで)を追加します。
- 結果の余りを10で割った値を取ります(つまり、10を法とする演算)。余りが0に等しい場合は、チェックディジットとして0を使用し、0でない場合は、10から余りを引いてチェックディジットを導き出します。
たとえば、ティッシュの箱のUPC-Aバーコードは「036000241457」です。最後の桁はチェックディジット「7」であり、他の数値が正しい場合、チェックディジットの計算で7が生成される必要があります。
- 奇数桁を追加します:0 + 6 + 0 + 2 + 1 + 5 = 14。
- 結果に3を掛けます:14×3 = 42。
- 偶数桁を追加します:3 + 0 + 0 + 4 + 4 = 11。
- 2つの結果を合計します:42 + 11 = 53。
- チェックディジットを計算するには、(53 modulo 10)とも呼ばれる(53/10)の余りを取り、0でない場合は、10から減算します。したがって、チェックディジットの値は7です。つまり(53/10) )= 5剰余3; 10-3 = 7。
別の例:次の食品「01010101010x」のチェックディジットを計算します。
- 奇数桁を追加します:0 + 0 + 0 + 0 + 0 + 0 = 0。
- 結果に3を掛けます:0 x 3 = 0。
- 偶数桁を追加します:1 + 1 + 1 + 1 + 1 = 5。
- 2つの結果を合計します:0 + 5 = 5。
- チェックディジットを計算するには、(5/10)の余りを取ります。これは(5 modulo 10)とも呼ばれ、0でない場合は、10から減算します。つまり(5/10)= 0余り5; (10-5)= 5。したがって、チェックディジットのx値は5です。
ISBN 10
10桁の国際標準図書番号の最後の文字は、各桁に数値の位置(右から数えて)を掛けて、11を法とするこれらの積の合計が0になるように計算されたチェックディジットです。最も遠い桁右側(1を掛けたもの)は、合計を正しくするために選択されたチェックディジットです。文字Xとして表される値10が必要な場合があります。たとえば、ISBN0-201-53082-1を 使用します。:積の合計は0×10 + 2×9 + 0×8 + 1×7 + 5×6 + 3×5 + 0×4 + 8×3 + 2×2 + 1×1 =99≡0( mod 11)。したがって、ISBNは有効です。位置は左から数えることもできることに注意してください。この場合、チェックディジットに10を掛けて、有効性をチェックします。0×1 + 2×2 + 0×3 + 1×4 + 5×5 + 3×6 + 0 ×7 + 8×8 + 2×9 + 1×10 =143≡0(mod 11)。
ISBN 13
ISBN 13(2007年1月に使用)は、本のバーコードの下にあるEAN-13コードと同じです。そのチェックディジットは、偶数桁が奇数桁ではなく3倍されることを除いて、UPCと同じ方法で生成されます。[3]
EAN(GLN、GTIN、GS1が管理するEAN番号)
EAN(European Article Number)チェックディジット(GS1によって管理される)は、奇数の位置番号のそれぞれに3を掛けたものを合計し、次に偶数の位置番号の合計を加算することによって計算されます。数字は右から左に向かって調べられるので、最初の奇数の位置はコードの最後の桁です。結果の最後の桁を10から減算して、チェックディジットを計算します(または、すでにゼロの場合はそのままにします)。GS1チェックディジット計算機と詳細なドキュメントはGS1のWebサイトでオンラインになっています。[4] 別の公式計算機ページは、GTIN-13のメカニズムがグローバルロケーション番号/ GLNでも同じであることを示しています。[5]
NCDA
2004年から使用されているNOIDチェックディジットアルゴリズム(NCDA)[6]は、永続識別子でのアプリケーション用に設計されており、拡張数字と呼ばれる文字と数字の可変長文字列で機能します。これはARK識別子スキームで広く使用されており、 HandleSystemやDOIなどのスキームでもある程度使用されています。拡張数字はベータ数値に制限されます英数字から母音を引いたものと文字「l」(ell)。この制限は、誤って単語を形成する可能性が低く、Oと0、またはlと1の両方を含まない不透明な文字列を生成する場合に役立ちます。R= 29の素数基数を持つベータ数値レパートリーにより、アルゴリズムは単一の検出を保証できます。長さがR = 29文字未満の文字列の文字および転置エラー[7] (それを超えると、チェックがわずかに弱くなります)。このアルゴリズムは、基数がRで、文字列の長さがR文字未満の任意の文字レパートリーに一般化されます。
チェックディジットの他の例
インターナショナル
- 国際SEDOL番号。
- ISSNコードまたはIMO番号の最後の桁。
- 国際証券識別番号(ISIN)。
- Object Management GroupFIGIの標準の最終桁。[8]
- 国際CAS登録番号の最後の桁。
- Luhnアルゴリズムによって計算されたクレジットカード口座番号のモジュロ10チェックディジット。
- 銀行のギロ(クレジット転送)で使用されるノルウェーのKID(顧客識別番号)番号でも使用されます。
- 携帯電話のIMEIで使用されます。
- Global Trade Identification Number( GTIN )のEAN / UPCシリアル化の最後のチェックディジット。GTIN-8、GTIN-12、GTIN-13、GTIN-14に適用されます。
- DUNS番号の最後の桁(ただし、これは変更される予定です。たとえば、最後の桁はチェックディジットではなく、新しい割り当てで自由に選択されます)。
- 国際銀行口座番号の3桁目と4桁目(モジュロ97チェック)。
- 国際標準テキストコードの最後の桁。
- 磁気ストライプカードにエンコードされた最後の文字は、計算された縦方向の冗長性チェックです。
アメリカでは
- 米国の医療業界のNationalProviderIdentifierの10桁目。
- POSTNETコードの最後の桁。
- 北米のCUSIP番号。
- 米国で使用されている銀行コードであるABAルーティングトランジット番号の最後の(9番目の)桁。
- 車両識別番号(VIN)の9桁目。
- アリゾナ州とフロリダ州で使用されているメイヨークリニックの患者識別番号には、末尾のチェックディジットが含まれています[要出典]。
- 税関国境警備局のエントリ番号の11桁目。
中央アメリカでは
- モジュロ11に基づくグアテマラ税番号(NIT-NúmerodeIdentificaciónTributaria) 。
ユーラシアでは
- UK NHS番号は、モジュロ11アルゴリズムを使用します。
- スペインの財政識別番号(númerodeidentificaciónfiscal、NIF)、(モジュロ23に基づく)。
- Dutch Burgerservicenummer (BSN)(国民識別番号)は、モジュロ11アルゴリズムを使用します。
- イスラエルの TeudatZehut(IDカード)番号の9桁目。
- セルビアおよび旧ユーゴスラビア 固有のマスター市民番号(JMBG)の13桁目。(エラーまたは非居住者のため、すべてではありません)
- 11桁のトルコ識別番号の最後の2桁(トルコ語:TCKimlikNumarası)。
- 14文字のEU牛パスポート番号の9番目の文字(1から7までのサイクル:British Cattle Movement Serviceを参照)。
- アイスランドの ケニタラの9桁目(国民ID番号)。
- ベルギーとセルビアの銀行口座番号のモジュロ97チェックディジット。セルビアでは、参照番号としてモジュロ11を使用することもあります。
- ハンガリーのTAJ番号(社会保険番号)の9桁目。
- インドの居住者の場合、Aadhaarという名前の一意のID番号には、 Verhoeffアルゴリズムで計算された末尾の12桁目があります。[9]
- シンガポール知的財産局(IPOS)は、登録可能な知的財産(IP、商標、特許、登録意匠など)の出願番号の新しい形式を確認しました。Dammアルゴリズムで計算されたチェック文字が含まれます。[10]
- 中国の市民ID番号(第2世代)の最後の桁は、ISO 7064:1983を採用する中国のGuoBiao(別名国家標準)GB11643-1999で指定されているようにモジュロ11-2によって計算されます。計算されたチェック桁が10の場合、「X」が使用されます。
- エストニアの Isikukood(個人識別コード)の11桁目。
オセアニアで
- オーストラリアの税ファイル番号(モジュロ11に基づく)。
- ニュージーランドの NHI番号の7番目の文字。
- ニュージーランドの機関車の交通監視システム(TMS)番号の最後の桁。
アルゴリズム
注目すべきアルゴリズムは次のとおりです。
- Luhnアルゴリズム(1954)
- ヴァーヘフアルゴリズム(1969)
- Dammアルゴリズム(2004)
も参照してください
参考文献
- ^ カートランド、ジョセフ(2001)。識別番号とチェックディジットスキーム。教室のリソース資料。アメリカ数学協会。pp。4–6。ISBN 978-0-88385-720-5。
- ^ 「GS1チェックディジット計算機」。GS1米国。2006年。2008年5月9日のオリジナルからアーカイブ。2008年5月21日取得。
- ^ 「ISBNユーザーズマニュアル」。国際ISBNエージェンシー。2005 。2008年5月21日取得。
- ^ 「チェックディジット計算機」。GS1。2005 。2008年5月21日取得。
- ^ 「GS1US公式サイトのチェックディジット計算機」。GS1US 。2012年8月9日取得。
- ^ https://metacpan.org/pod/distribution/Noid/noid#NOID-CHECK-DIGIT-ALGORITHM
- ^ David Bressoud、Stan Wagon、「計算数論」、2000年、Key College Publishing
- ^ http://openfigi.com
- ^ 「ユニークな身分証明書」。オタクガゼット。IEEE Student Branch(2011年秋):16。2012-10-24のオリジナルからアーカイブ。
{{cite journal}}
:(ヘルプ)の外部リンク|issue=
- ^ Chong-Yee Khoo博士(2014年1月20日)。「IPOSでのシンガポールIPアプリケーション番号の新しいフォーマット」。シンガポール特許ブログ。CantabIP 。2014年7月6日取得。
外部リンク
- 識別番号とチェックディジットスキーム(さまざまなチェックディジットスキームの数学的説明)
- UPC、EAN、およびSCC-14チェックディジット計算機
- GS1チェックディジット計算機