
バーコードの数学 — EAN-13 のチェックデジットとモジュール設計はなぜこうなったのか
コンビニでレジに通す商品のバーコード — あの白黒の縞模様は、ただの「線の太さ」で数字を表しているわけではありません。EAN-13(日本ではJANコード)と呼ばれるこの規格には、スキャナが上下逆さまに読んでも正しくデコードできる仕組み、1桁の入力ミスを100%検出するチェックデジット、そして全世界で重複しない番号体系が設計されています。本記事では、バーコードの物理構造と数学を一次資料から整理します。
バーコードの誕生 — 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〜3 | GS1プレフィックス(国コード) | 49(= 日本) |
| 3〜12桁目 | 9〜10 | 商品アイテムコード(事業者+商品) | 0123456789 |
| 13桁目 | 1 | チェックデジット | 4 |
GS1プレフィックスの「49」と「45」は日本に割り当てられています。ただし、この番号は商品の原産国ではなく、事業者が番号を取得した国を示します。日本企業が中国で製造した商品でも、JANコードは「49」で始まります。
事業者コードの桁数は国や事業者の規模によって7桁または9桁で、残りが商品コードに使われます。GS1 Japan(旧 流通システム開発センター)が事業者コードを発行・管理しています。
チェックデジットの計算 — mod10 加重アルゴリズム
13桁目のチェックデジットは、入力ミスやスキャンエラーを検出するための数字です。計算方法は以下の通り:
- 最初の12桁を左から順に並べる
- 奇数位置(1, 3, 5, ... 番目)の数字に ×1
- 偶数位置(2, 4, 6, ... 番目)の数字に ×3
- すべての積を合計する
- 合計を10で割った余りを求める
- (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桁) | 42 | 7モジュール × 6桁 |
| センターガード | 5 (01010) | 左右データの区切り |
| 右データ(6桁) | 42 | 7モジュール × 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-8 | 8桁 | 小型商品(チューインガム等)。EAN-13の短縮版 |
| UPC-A | 12桁 | 北米の標準。EAN-13の先頭に「0」を付けると相互変換可能 |
| Code 128 | 可変長 | 英数字・記号対応。物流ラベル、業務帳票 |
| Code 39 | 可変長 | 英大文字+数字。工業・軍事・医療で広く使用 |
| ITF-14 | 14桁 | 物流用段ボール箱。太い線で印刷品質が低くても読める |
| 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 が全世界の番号体系を管理
参考文献・ソース
- GS1 General Specifications (Release 24.0, Jan 2024) — Section 5.2: EAN/UPC Symbology ↗
- ISO/IEC 15420:2009 — Information technology — Automatic identification and data capture techniques — EAN/UPC bar code symbology specification ↗
- Woodland, N.J. & Silver, B. (1952). US Patent 2,612,994 — Classifying Apparatus and Method ↗
- GS1 Japan — JANコードの利用について ↗
記事作成に関する注記
本記事は AI(大規模言語モデル)を編集補助として活用して作成しています。 公開前に編集者が内容を確認していますが、事実誤認・仕様の解釈ミス・最新情報との齟齬が含まれる可能性があります。 重要な判断を行う際は、本文中の一次ソースや公式ドキュメントを必ずご自身でご確認ください。 誤りにお気づきの場合は、お問い合わせフォームよりご連絡いただけると助かります。


