バーコードの最後の数字は何のため? 読み取りミスを見つける計算

お菓子の袋や文房具に印刷された縞模様の下を見ると、数字が並んでいます。レジで読み取るための番号だと知っていても、最後の一桁だけに特別な役割があることは見落としがちです。この数字は「チェックデジット」と呼ばれ、読み取った番号の誤りを見つけやすくするために使われます。どんな計算をしているのでしょうか。

縞模様と数字は、商品名そのものではない

一般的なJANコードは、数字を機械で読み取れる縞模様として表したものです。レジは読み取った番号を手がかりに商品データベースを参照して、商品名や価格を取り出します。バーコードの白黒の線に、売価や賞味期限がそのまま文章として書かれているわけではありません。

よく使われる標準タイプのJANコードは13桁です。最初から12桁目までは商品を識別する番号を構成し、13桁目にはチェックデジットが入ります。すべてのバーコードが13桁というわけではなく、短縮タイプなどもあります。まずは標準タイプを例にして考えます。

最後の数字の目的は、読み取った並びが一定の計算規則を満たしているか調べることです。決まった数字の並びが「正しい商品」を意味するとは限りませんが、不自然な読み取り結果に気づく手助けになります。

最後の一桁を自分で計算してみよう

13桁のJANコードでは、最初の12桁を左から数え、奇数番目の数字はそのまま足し、偶数番目の数字は3倍して足します。そして合計を10の倍数にするために必要な一桁を最後に付けます。たとえば最初の12桁を「000000000001」としてみましょう。

この例では奇数番目の数字の合計は0、偶数番目の合計は1なので、重みをつけた合計は0+3×1=3です。3を10の倍数にするために必要な数は7。したがってチェックデジットは7となり、例の13桁は「0000000000017」です。これは計算練習用の番号で、実在の商品の番号を示すものではありません。

合計がすでに10の倍数なら、チェックデジットは0です。計算を一般化すると、合計をSとしたとき「(10-Sを10で割った余り)をさらに10で割った余り」で求められます。数字の順番を間違えると答えが変わるので、奇数番目と偶数番目に印を付けるとミスを防ぎやすくなります。

読み間違えを検出できても、万能ではない

仮にレジがある一桁を別の数字として読み取ったとします。1桁だけを別の数字として読んだ場合は、必ず計算規則が崩れ、誤りを検出できます。重みの1と3が10と互いに素であり、1〜9の差が10の倍数にならないためです。こうした仕組みがあるため、縞模様を読み取った結果を何の確認もせず使うより安全になります。

ただし、チェックデジットは「入力された13桁の中に矛盾があるか」を判断する補助です。複数の桁が同時に変わり、重み付き合計の変化がちょうど10の倍数になれば、誤りを見逃す場合があります。また、規則を満たす数字が商品データベースに登録されているとは限りません。

同じ数字でも、印刷が汚れていると機械が読み取りにくくなることがあります。縞模様の印刷品質、番号の規則、商品データベースへの登録は別々の問題です。「チェックデジットが合えば商品名も正しい」という考えは成り立ちません。

隣接する2桁を入れ替えた場合は別です。数字の差が5であると、重み付き合計の変化が10の倍数となり、入れ替わりに気づけない例があります。

間違いの種類を分けて考える

データを扱うときの誤りには、数字の打ち間違い、数字の並べ替え、そもそも違う商品を選んだことなど、性質の異なるものがあります。チェックデジットが主に見つけたいのは、番号として読み取った数字が規則に合わないケースです。

同じ仕組みは別の番号体系にも見られますが、すべてが同じ重みや計算式というわけではありません。学校や家庭の練習では、どの種類の番号を扱うのかを先に明記しておきましょう。GTINやJANコードの具体的な計算方法はGS1 Japanの公式説明で確かめられます。

チェックデジットの考え方を学ぶと、「間違いが一つも起きない仕組み」ではなく「起きた間違いの一部を簡単な検査で発見する仕組み」に意味があると分かります。完全さを要求するより、検出できる範囲を知ることが重要です。

バーコードとQRコードの違いも整理しよう

細長いバーコードは、主に番号を効率よく識別する用途で使われます。一方、QRコードにはより多様なデータを格納でき、読み取りに必要な位置合わせの工夫や誤り訂正の仕組みがあります。どちらも情報を機械で読める形にする道具ですが、目的と構造は同じではありません。

例えば買い物では、JANコードで商品を特定し、レジのシステムが価格を検索します。ポスターではQRコードを読み取り、ウェブサイトのURLを開くことがあります。「コード自体に何が記録されているか」と「読み取った後に何をするか」を分けると仕組みを理解しやすくなります。

気になる商品のバーコードを見つけたら、最後の数字が計算で一致するか試してみてください。その番号を勝手に改変してレジなどで利用する必要はありません。紙の上で、数字を通じてミスを見つけるしくみを学ぶだけで十分です。

チェックデジットが間違いを見つける範囲

計算練習用の「0000000000017」から最後の7だけを8に変えると、重み付き合計と末尾の値を合わせた数は11になり、10の倍数ではなくなります。末尾が1だけずれたことを発見できます。同じように、先頭から12桁の一つだけを変えても、多くの場合は規則が崩れます。

一方で、二つの数字を同時に変えて、合計の変化が打ち消し合うケースがあります。例えば重みが同じ位置同士で、一方を1増やし、もう一方を1減らせば、合計は元のままになる場合があります。これでは計算の結果だけを見ても変化を発見できません。したがって、チェックデジットはすべての誤りを検出する仕組みではないのです。

この限界を知っておくと、バーコードが読めないときに番号を手入力して確認する意味や、表示された商品名が正しいかを別途点検する意味が分かります。計算による検査と人間の最終確認は、互いに置き換えるのではなく組み合わせるものです。

参考資料

おすすめの記事