N2
NanToo
バーコードの数学 — EAN-13 のチェックデジットとモジュール設計はなぜこうなったのか
BBUSINESS
ビジネス9 分で読める

バーコードの数学 — EAN-13 のチェックデジットとモジュール設計はなぜこうなったのか

コンビニでレジに通す商品のバーコード — あの白黒の縞模様は、ただの「線の太さ」で数字を表しているわけではありません。EAN-13(日本ではJANコード)と呼ばれるこの規格には、スキャナが上下逆さまに読んでも正しくデコードできる仕組み、1桁の入力ミスを100%検出するチェックデジット、そして全世界で重複しない番号体系が設計されています。本記事では、バーコードの物理構造と数学を一次資料から整理します。

#バーコード#EAN-13#JAN#チェックデジット#GS1
AD

バーコードの誕生 — 1974年6月26日、最初にスキャンされた商品

バーコードの原型は1952年、Joseph Woodland と Bernard Silver が取得した米国特許(US 2,612,994)に遡ります。彼らはモールス符号を縦に引き延ばした「同心円パターン」を考案しましたが、当時のスキャナ技術では実用化できませんでした。

転機は1973年、米国の食料品業界団体がUniversal Product Code (UPC)を標準規格として採択したことです。IBMのGeorge Laurer が設計したUPC-Aは12桁の数字を白黒のバーで表現する方式で、1974年6月26日、オハイオ州トロイのMarsh SupermarketでWrigley's Juicy Fruit ガムが世界初のバーコードスキャンされた商品となりました。

その後、欧州と日本が独自の2桁の国コードを追加して13桁に拡張したのがEAN-13(European Article Number)です。日本ではJANコード(Japanese Article Number)と呼ばれますが、規格としてはEAN-13と完全に同一です。現在はGS1(旧 国際EAN協会)が全世界の番号体系を管理しています。

EAN-13 の13桁構造

EAN-13の13桁は、以下の3つのパートで構成されます:

位置桁数名称例(4901234567894)
1〜2桁目2〜3GS1プレフィックス(国コード)49(= 日本)
3〜12桁目9〜10商品アイテムコード(事業者+商品)0123456789
13桁目1チェックデジット4

GS1プレフィックスの「49」と「45」は日本に割り当てられています。ただし、この番号は商品の原産国ではなく、事業者が番号を取得した国を示します。日本企業が中国で製造した商品でも、JANコードは「49」で始まります。

事業者コードの桁数は国や事業者の規模によって7桁または9桁で、残りが商品コードに使われます。GS1 Japan(旧 流通システム開発センター)が事業者コードを発行・管理しています。

チェックデジットの計算 — mod10 加重アルゴリズム

13桁目のチェックデジットは、入力ミスやスキャンエラーを検出するための数字です。計算方法は以下の通り:

  1. 最初の12桁を左から順に並べる
  2. 奇数位置(1, 3, 5, ... 番目)の数字に ×1
  3. 偶数位置(2, 4, 6, ... 番目)の数字に ×3
  4. すべての積を合計する
  5. 合計を10で割った余りを求める
  6. (10 − 余り) mod 10 がチェックデジット

具体例: 4 9 0 1 2 3 4 5 6 7 8 9

×1: 4+0+2+4+6+8 = 24
×3: 9+1+3+5+7+9 = 34 → ×3 = 102
合計: 24 + 102 = 126
126 mod 10 = 6
チェックデジット = (10 − 6) mod 10 = 4

この「1と3の交互加重」方式は、隣接する2桁の入れ替え(transposition error)を高い確率で検出できます。例えば「49」を「94」と打ち間違えると、加重の切り替わりによって合計値が変わり、チェックデジットが一致しなくなります。

ただし、この方式ではすべての入れ替えを検出できるわけではありません。具体的には、差が5の数字の入れ替え(例: 0↔5, 1↔6, 2↔7)を検出できないケースがあります。とはいえ、単純な1桁の書き間違い(substitution error)は100%検出できます。

バーの物理構造 — モジュールとパリティ

EAN-13のバーコードは、最小単位の幅を「1モジュール」として、各数字を7モジュール幅の白黒パターンで表現します。全体の構造は:

領域モジュール数役割
クワイエットゾーン(左)11以上スキャナに「ここからバーコード開始」を知らせる空白
スタートガード3 (101)読み取り開始位置
左データ(6桁)427モジュール × 6桁
センターガード5 (01010)左右データの区切り
右データ(6桁)427モジュール × 6桁
エンドガード3 (101)読み取り終了位置
クワイエットゾーン(右)7以上終端の空白

合計 95モジュール(ガード含む)+ 両端のクワイエットゾーンで構成されます。

各数字には3種類のエンコーディングパターンがあります:

  • L コード(奇数パリティ): 左側で使用。黒バーから始まる
  • G コード(偶数パリティ): 左側で使用。白バーから始まる
  • R コード: 右側で使用。L コードの白黒反転

13桁目(先頭桁)はバーとして印刷されず、左6桁のLコードとGコードの組み合わせパターンで暗黙的に表現されます。これがUPC-12桁をEAN-13桁に拡張した際の巧妙な設計で、UPCスキャナとの後方互換性を保ちながら1桁を追加できた理由です。

なぜ上下逆さまでも読めるのか

バーコードスキャナは、バーコードをどちらの方向からスキャンしても正しく読み取れます。この仕組みは以下の設計によります:

  • ガードパターンの対称性: スタートガード(101)とエンドガード(101)は同一。スキャナはどちらから入っても「ガード」を認識できる
  • L/Rコードの反転関係: 右側のRコードは左側のLコードの白黒反転。スキャナが逆方向から読んだ場合、パリティの違いから方向を判定し、データを反転させる
  • センターガード(01010): 左右の区切りを示す。逆読みでも同じパターン

つまり、スキャナは「まずガードパターンを見つけ、パリティで方向を判定し、必要なら反転して正しい数列を得る」という手順で処理します。レジでバーコードの向きを気にせずスキャンできるのは、この設計のおかげです。

EAN-13以外のバーコード規格

用途によってさまざまな規格が使い分けられています:

規格桁数主な用途
EAN-88桁小型商品(チューインガム等)。EAN-13の短縮版
UPC-A12桁北米の標準。EAN-13の先頭に「0」を付けると相互変換可能
Code 128可変長英数字・記号対応。物流ラベル、業務帳票
Code 39可変長英大文字+数字。工業・軍事・医療で広く使用
ITF-1414桁物流用段ボール箱。太い線で印刷品質が低くても読める
Codabar (NW-7)可変長図書館、宅配便、血液管理。スタート/ストップ文字(A〜D)付き

1次元バーコードの限界は格納できる情報量の少なさです。EAN-13は13桁の数字のみ、Code 128でも実用上は数十文字が限界です。この制約を超えるために登場したのが、QRコード(1994年、デンソーウェーブ)やDataMatrixなどの2次元コードです。

まとめ

  • EAN-13(JANコード)は GS1プレフィックス(国) + 事業者・商品コード + チェックデジット の13桁構成
  • チェックデジットは mod10 の 1-3 交互加重。1桁の書き間違いを 100% 検出
  • 各数字は 7モジュール幅 の白黒パターンで表現。全体で 95 モジュール
  • 先頭桁はバーとして印刷されず、左6桁の L/G パリティパターン で暗黙的に表現(UPC互換のための設計)
  • ガードパターンと L/R コードの反転関係により、上下逆でもスキャン可能
  • 1974年 Wrigley's ガムの初スキャンから50年、現在は GS1 が全世界の番号体系を管理

参考文献・ソース

記事作成に関する注記

本記事は AI(大規模言語モデル)を編集補助として活用して作成しています。 公開前に編集者が内容を確認していますが、事実誤認・仕様の解釈ミス・最新情報との齟齬が含まれる可能性があります。 重要な判断を行う際は、本文中の一次ソースや公式ドキュメントを必ずご自身でご確認ください。 誤りにお気づきの場合は、お問い合わせフォームよりご連絡いただけると助かります。

🔧 関連ツール

📚 関連記事

AD