技術情報・バーコードの基礎知識Basic knowledge of the technical information bar code

チェックデジット

Last Update 2022.2.7

概要

チェックデジットは、チェックキャラクタとも言われ、データの信憑性を確認するためにデータの最後に付加するキャラクタである。チェックデジットは、一般的に各桁の値の総和を求め、それを桁数で割った余りを利用するが、その演算方法は、モジュラス10(Modulus 10)やモジュラス43(modulus 43)など様々である。モジュラスをモジュロ(modulo)とも言う。

チェックデジットは、JAN/EANやCode128のように予めシンボルに組み込まれているもの、Code39やインターリーブド2 of 5のようにシンボルに組み込まれていないが、チェック方法が標準化されているもの、Codabar(NW-7)のようにチェック方法が標準化されているにも関わらす、現実的には様々なチェック方法が利用されているもの、そして、Code 2 of 5のように全く規定されてないものがある。チェックデジットが標準化されている場合は、バーコードリーダの機能で素早くデータチェックできる。

通常、チェックデジットは、バーコードシンボルの読取が正しく実行したかをチェックするために利用されるが。しかし、EDIデータを複数のバーコードシンボルで表示する場合は、EDIデータ全体のチェックデジットをシンボルチェックデジットの前に付加する場合がある。

インターリーブド2 of 5やマトリックス2 of 5は、キャラクタ構成がシンプルであるために誤読が発生しやすい。特にキャラクタが消滅する「桁落ち」が多く発生するので、チェックデジットを付加しない場合でも桁数チェックだけは必須である。

チェックデジットの効果

チェックデジットなしの場合と付けた場合の誤読率は、どの位の差があるのだろうか。1981年、米国国防総省が、Code39を物流シンボルLOGMARSに採用する際に、凸版印刷、写真印刷、ドットプリンタ等の様々なラベルを混ぜてテストしている。その結果は、チェックデジットなしが約300万キャラクタに1キャラクタの誤読に対し、チェックデジット付きでは、1億4900万キャラクタに1キャラクタになったと報告されている。

また、1981年、米国血液銀行共通化委員会CCBBA(The Committee for Commonality in Blood Banking Automation)は、Codabar(NW-7)についてテストしている。その結果は、チェックデジットなしで150万キャラクタに1キャラクタに対し、チェックデジット付きでは、特別に誤読率が増加した10日間を除けば、910万キャラクタに1キャラクタであったと報告されている。

モジュラス10/ウェイト3

モジュラス10/ウェイト3は、数字のみのチェック方式で、キャラクタに3,1,3,1とウェイトを掛けていき、キャラクタの総和が10の倍になる値をチェックデジットとする。具体的には、数値をモジュラスで割って得られた余りを、モジュラスから差し引いた数値(補数)をチェックデジットとする。JAN/EAN, UPC, インターリーブド2 of 5等に使用されている。その計算方法を次に示す。

(1) データキャラクタの中で最も右にあるキャラクタを奇数とし、全てのデータキャラクタを奇数位置と偶数位置に分類する。

(2) 奇数位置にあるキャラクタを3倍する。

(3) 偶数位置にあるキャラクタを1倍する。

(4) 手順(2)の結果と手順(3)の結果を合計する。

(5) 手順(4)の結果を10で割り、余りを求める。

(6) 10から手順(5)の結果の余りを引いた数字がチェックデジットである。なお、手順(5)の答えの余りが0の場合は、チェックデジットは0となる

(7) インターリーブド2 of 5は、データとチェックデジットの合計が偶数桁でなければならないので、奇数桁の場合は、データの前に0を付加する。

例:JAN-8のデータが4912349場合のチェックデジットを求める。

(1) データキャラクタの中で最も右にあるキャラクタを奇数とし、全てのデータキャラクタを奇数位置と偶数位置に分類する。

(2) 奇数位置にあるキャラクタをそれぞれ3倍、偶数位置にあるキャラクタを1倍する。

Image29a

(3) 奇数位置と偶数位置の数字を合計する。

12+9+3+2+9+4+27=66

(4) (3)の結果を10で割り、余りを求める。

66÷10=6余り6

(5) 10から(3)の結果の余りを引く。

10-6=4

したがって、このチェックデジットは4である。

モジュラス10/ウェイト2

モジュラス10/ウェイト2は、数字のみのチェック方式で、キャラクタに2,1,2,1とウェイトを掛けていき、それらの総和が10の倍数になる値をチェックデジットとする。具体的には、数値をモジュラスで割って得られた余りを、モジュラスから差し引いた数値(補数)をチェックデジットとする。Codabar(NW-7)やOCRに使用されることがある。その計算方法を次に示す。

(1) データキャラクタの中で最も右にあるキャラクタを奇数とし、全てのデータキャラクタを奇数位置と偶数位置に分類する。

(2) 奇数位置にあるキャラクタをそれぞれ2倍して合計する。この時、2桁になった数字は、10の位と1の位を分離して別に合計する。

(3) 偶数位置にあるキャラクタを合計する。

(4) 手順(2)の結果と手順(3)の結果を合計する。

(5) 手順(4)の合計の結果を10で割り、余りを求める。

(6) 10から手順(5)の結果の余りを引いた数字がチェックデジットである。なお、手順(5)の答えの余りが0の場合は、チェックデジットは0となる。

例:Codabar(NW-7)のデータが6031492場合のチェックデジットを求める。

(1) データの右側を奇数位置とし、奇数桁を2倍する。

Image29b

(2) 各桁を合計する。

1+2+0+6+1+8+9+4=31

(3) (2)の結果を10で割り、余りを求める。

31÷10=3余り1

(4) 10から(3)の結果の余りを引く。

10-1=9

したがって、このチェックデジットは9である。

モジュラス11/ウェイト2,3,4,5,6,7

モジュラス11は、数字データのみのチェック方式で、キャラクタに2,3,4,5,6,7とウェイトを掛け、それらのキャラクタの総和が、10の倍数になる値をチェックデジットとする。具体的には、数値をモジュラスで割って得られた余りを、モジュラスから差し引いた数値(補数)をチェックデジットとする。

モジュラス11は、Codabar(NW-7)やOCRに使用されることがある。モジュラス11は、データに欠番ができるため連番管理には不都合であるが、モジュラス10に比べ隣合う左右の数字が入れ替わる時(転倒エラー)や1桁おいて左右の数字が入れ替わる時(複転レラー)に検出率が高い。その計算方法を次に示す。

(1) データキャラクタの中で最も右にあるキャラクタから順に2,3,4,5,6,7を繰り返し、ウェイトを付ける。(これ以外のウェイトの付けたもある。)

(2) データのそれぞれの数値に手順(1)で付けたウェイトを乗じる。

(3) 手順(2)の結果の全てを合計する。

(4) 手順(3)の合計の結果を11で割り、余りを求める。

(5) 11から手順(4)の結果の余りを引いた数字がチェックデジットである。なお、手順(4)の答の余りが0の場合は、チェックデジットは0とし、余りが1の場合は10となるためこのデータは欠番とする。

例:Codabar(NW-7)のデータが1526734の場合のチェックデジットを求める。

(1) データの右側を奇数位置とし、2,3,4,5,6,7と順にウェイトを付ける。

Image29c

(2) 各桁を合計する。

2+35+12+30+28+9+8=124

(3) (2)の結果を11で割り、余りを求める。

124÷11=11余り3

(4) 11から3)の結果の余りを引く。

11-3=8

したがって、このチェックデジットは8である。

DR(Divide Remains)チェック

DRチェックは、キャラクタ列を数値とし、それをモジュラスで割って得られた余りをチェックデジットとする方式である。7DRは、総和を7で割り、9DRは、総和を9で割る。

7DRチェックは、Codabar(NW-7)の連続番号シールや宅配便の伝票番号に使用されている。エラー検出率はあまり高くないが、計算式が容易なので使いやすい。

例:7DRで1234のチェックデジットを求める。

(1) データキャラクタ列を数値にする。

1234

(2) 手順(1)の結果を7で割り、余りを求める。

1234÷7=176余り2

(3) この余り2をチェックデジットとする。

DSR(Divide Supply Remains)チェック

DSRチェックは、キャラクタ列を数値とし、それがモジュラスの倍数になる値を求める方式である。具体的には、数値をモジュラスで割り、その余りをモジュラスから差し引いた数値(補数)をチェックデジットとする。7DSRは、総和を7で割り、9DSRは、総和を9で割る。

例:7DSRで1234のチェックデジットを求める。

(1) データキャラクタ列を数値にする。

1234

(2) 手順(1)の結果を7で割り、余りを求める。

1234÷7=176余り2

(3) この余り2を7から引いた結果5をチェックデジットとする。但し、結果が7になった場合は、0とする。

7-2=5

関連する製品

ls2208
  • 1Dバーコード

お問い合わせ