バーコードの最後の1桁は何を見張っている?

雑記Topに戻る

最後の数字は、読み取りや入力の誤りを検出する

商品のJANコードなどで最後に付く1桁は、チェックデジットと呼ばれます。前の桁から計算できる数字を付けておき、読み取った後に計算し直して一致するか調べる仕組みです。違っていれば、読み取りや手入力のどこかに誤りがある可能性を検出できます。

ただし、すべてのバーコードが同じ方式を使うわけではありません。ここでは、商品識別に使われるGTINのうち、13桁のJANコード(GTIN-13)を例にします。バーコードの縞模様そのものの検査と、数字列の最後の1桁による検査も、区別して考えましょう。

13桁のJANコードではどう計算するか

チェックデジットを除く12桁に、左から1、3、1、3……という重みを掛けて足します。その合計に最後の1桁を足した結果が、10の倍数になるように選びます。すでに10の倍数なら、最後は0です。数字の位置を右から数える説明もありますが、同じGTINの規則を別の向きから説明しているものです。

計算用の架空の数字列123456789012(商品への使用を示すものではない)
桁の組 数字 小計 重み付き合計
左から奇数番目 1、3、5、7、9、1 26 26×1=26
左から偶数番目 2、4、6、8、0、2 22 22×3=66
全体 12桁 26+66 92

92を次の10の倍数である100にするには8が必要なので、この計算例の末尾は8です。13桁全体を検査すると、重み付き合計は100になります。これは計算を理解するための例であり、チェックデジットが正しい数字を自由に商品番号として割り当ててよいわけではありません。

一文字の打ち間違いに強い理由

ある1桁だけを別の数字へ変えたとします。その差は、0でない1~9のいずれかの大きさです。重みが1でも3でも、差を掛けた値が10の倍数になることはありません。そのため、ほかの桁を固定した一桁の置換なら、この検査で食い違いを検出できます。チェックデジット自身だけが変わった場合も同様です。

重みを交互に変えているため、単なる数字の合計より、数字の順番の誤りも見つけやすくなります。同じ数字をただ足すだけなら、隣の二つを入れ替えても合計は変わりません。重み付きでは、多くの入れ替わりで合計が変わります。

見逃す誤りもある

例えば隣り合う1と6を入れ替えた場合、重み1と3の場所での合計は、1+3×6=19と、6+3×1=9になります。差は10なので、10で割った余りは同じです。このように差が5の数字の隣接入れ替えなどは、チェックデジットだけでは検出できません。複数桁の誤りが打ち消し合うこともあります。

最後の1桁には0~9の10通りしかなく、多数の異なる数字列が同じチェックデジットを持ちます。したがって、検査に通ったことは「この商品で間違いない」「番号の発行元が正しい」「偽造されていない」という証明にはなりません。誤り検出と、商品情報の照合や真正性の確認は別の仕事です。

誤りの場所を直してくれるわけではない

計算結果が一致しなかったとしても、どの桁をどう直せば正しいかは、この1桁だけから一意には決まりません。通常は再読み取り、印字の確認、元資料との照合を行います。最後の数字だけを計算し直して「合うように直す」と、間違った本体の数字列を正しいように見せてしまうおそれがあります。

QRコードには別の誤り訂正の仕組みがあり、一部の損傷から情報を復元できる場合があります。JANコードのチェックデジットにも同じ能力がある、と考えてはいけません。どこまで検出・訂正できるかは、符号の方式によって違います。

実際に番号を作成・運用する場合は、GS1の公式手順と割当て条件を確認してください。チェックデジットは、番号を登録する権利を与えるものではなく、決められた番号を正しく扱うための小さな安全装置です。

関連する雑記

参考資料

資料確認日:2026年10月2日

雑記Topに戻る