EAN と UPC のチェックディジットは、読み取り機が読み違えたときに気づけるようにするための仕組みです。値そのものを守る仕組みではありません。この記事では、末尾の一位がどのように決まるのか、桁数によって何が変わるのか、そして検証が通ることの意味と限界を整理します。
商品バーコードの末尾 1 桁はどのように決まるのか?
末尾の一位は、それ以外の位から計算で導かれます。考え方は他の番号と同じで、位ごとに重みを掛けて足し、決められた数で割った結果をもとに一位を作ります。
- 重みは交互に切り替わります。多くの体系で、小さい値と大きい値が一位おきに入れ替わります。
- 掛け算の起点がどちら側かは、番号の長さによって変わります。
- 総和を法で割った余りに対し、補数を取って一位に写します。
- 得られた一位が、そのまま末尾の値になります。
計算そのものは単純です。難しいのは、長さによって起点が変わるという点です。ここを取り違えると、正しい番号を誤りとして報告してしまいます。
二つの代表的な長さと重みの並び
実務でよく出会うのは、短い方と長い方の二種類です。
| 種類 | 位置づけ | 重みの起点 |
|---|---|---|
| 短い体系 | 北米で広く使われる | 先頭側から |
| 長い体系 | 国際的に広く使われる | 末尾側から数える |
重要なのは、どちらが正しいという話ではないという点です。それぞれの体系で、起点が決められています。実装では、受け取った値の長さを見て、どちらの規則を適用するかを決める必要があります。
片方の規則だけを書いてしまうと、もう片方の値がすべて誤りとして報告されます。しかも、エラーの出方が「たまに違う」ではなく「規則的に全部違う」ので、原因に気づきやすい反面、影響範囲は大きくなります。
右から左へ重みを掛ける考え方
計算の向きを決めるのは、末尾の一位を除いた部分です。多くの実装では、末尾に近い側から数えて重みを割り当てます。こうすると、番号が長くなっても末尾側の重みは変わりません。
この設計には理由があります。番号の先頭側は体系の識別に使われる部分であり、後から桁が増える可能性がある一方、末尾側は常に同じ位置にあります。末尾から数える方式は、長さが変わっても末尾の扱いが安定します。
実装上の注意点として、総和を保持するだけで十分であり、掛け算の結果をすべて保存する必要はありません。長い一覧を処理するときも、位ごとに足し込んでいく形にすれば、記憶域の問題は起きません。
接頭辞が語っていること、語っていないこと
番号の先頭側は、体系を管理する組織によって、国や地域の範囲に割り当てられています。この接頭辞は、検索や分類の手がかりになります。
ただし、接頭辞が示すのは割り当ての範囲であって、生産地ではありません。商品が別の場所で作られ、別の場所から出荷されることは珍しくありません。接頭辞から生産地を断定する説明を書いてしまうと、事実と食い違う案内になります。
また、接頭辞の一覧を記事や資料に転記するときは、必ず管理組織の公表資料に当たってください。古い一覧を写すと、割り当ての変更が反映されません。
検証を通れば読み取れるようになるのか?
検証を通ることと、読み取り機が実際に読めることは別の話です。検証は、番号の内部のつじつまを見ているだけです。
- 印字がかすれている、反射が強いといった物理的な原因は、検証では分かりません。
- 読み取り機が一文字余分に拾った場合、検証は失敗しますが、原因は番号ではなく装置と印刷にあります。
- 隣の商品の番号を拾ってしまった場合、番号としては完全に正しい値が読み取られます。検証は成功し、内容だけが違います。
したがって、検証に失敗したときは、まず入力と読み取りの品質を疑ってください。数字の書き写しを先に疑うのは、順序として後になります。
また、計算が通ることは真正品の証明ではありません。検証用の位は転記の誤りを見つけるためのものであり、模造を防ぐ仕組みではないからです。
開発者向け:一括読み取りと誤りの切り分け
大量の値を処理するときは、結果を二値で返さないことが重要です。
- 長さが体系に合わない。入力の段階で落ちます。
- 文字種が合わない。全角の数字が混ざっている場合などが該当します。
- チェックディジットが成立しない。読み取りの誤りか、手入力の誤りです。
- 長さも算法も合うが、体系が分からない。接頭辞が想定の範囲にない場合です。
三番目と四番目は、利用者の取るべき行動が違います。三番目は値を再確認し、四番目は体系そのものを確認します。一つの失敗メッセージにまとめると、どちらの行動が必要かが伝わりません。同族の計算の全体像はチェックディジットのアルゴリズムにまとめています。
なお、本文で述べたのはバーコードの一般的な性質と計算の考え方であり、例として想定した値はすべて説明のための作り物です。実在の商品や事業者を指すものではなく、商品の真贋を判断する根拠にもなりません。
次の一手
手元の商品の値を番号検証ツールに貼り付けて、どの段階まで通るかを確認してみてください。読み取り機で読めない値と、検証で落ちる値は別の原因を持つことが多いと分かります。書籍や刊行物の番号はISBN と ISSN のチェックディジットで扱っており、計算の骨格は共通です。あわせて公的番号のチェックディジットの考え方も参考にしてください。