バーコードの仕組みを数学で解説!数字と線の意味・チェックデジットの計算方法までわかりやすく紹介

社会
スポンサーリンク
  1. バーコードの仕組みを数学で解説!数字と線の意味・チェックデジットの計算方法までわかりやすく紹介
  2. バーコードの仕組みを数学で考えるとどうなる?
    1. バーコードは黒い線だけではなく白い部分も情報になっている
    2. 実物で試すならスマホでバーコードを拡大すると分かりやすい
    3. バーコードリーダーは光の反射率の違いを利用する
  3. バーコードと数学にはどんな関係がある?
    1. 最小単位のモジュールを基準に幅を数える
    2. 比率が同じでも好きな大きさにしてよいわけではない
    3. バーコードは2進数そのものではない
  4. JANコードの数字と線はどのように対応している?
    1. JANコードとJANシンボルを混同しない
    2. GTIN-13は事業者コード・商品アイテムコード・チェックデジットで構成される
    3. 13桁なのに7モジュールの数字パターンは12個しかない
    4. 95モジュールはバーコード全体の幅ではない
  5. チェックデジットとは?バーコードに使われる数学の仕組み
    1. 最後の1桁は商品情報ではなく計算で決まる
    2. 公式例456995111617で実際に計算してみる
    3. 手元のJANコードを自分でチェックする手順
    4. チェックデジットで全部の間違いを発見できるわけではない
  6. バーコードを数字から作り読み取るまでの流れ
    1. 商品番号を決めたあとJANシンボルへ変換する
    2. スキャナーでは逆の処理が行われる
    3. 価格はJANコードの中に入っている?
  7. 手元のバーコードを5分で確認する方法
    1. まず13桁か8桁かを見る
    2. 次に左右の余白を見る
    3. 中央のガードパターンを探してみる
    4. 最後にチェックデジットを計算する
  8. バーコードが読めないときは数学的にどこが崩れたかを見る
    1. バーコードが読めない原因を確認するチェック表
  9. バーコードでよくある勘違いと失敗例
  10. 自分で作ったJANシンボルを確認するときの順番
    1. 見た目だけで「スマホで読めたからOK」と判断しない
    2. GS1標準かどうかを確認したい場合は公式アプリもある
  11. バーコードに使われている数学は難しい?
    1. 基本を理解するだけなら高度な数学は必要ない
  12. バーコードの仕組みと数学についてよくある疑問
    1. バーコードの線は数字そのものなの?
    2. JANコードには何桁ある?
    3. バーコードの最後の数字は何?
    4. チェックデジットが一致すれば正しい商品?
    5. QRコードとJANシンボルでは数学が違う?
  13. まとめ|バーコードは「線を読む」のではなく数学的な規則を読んでいる

バーコードの仕組みを数学で解説!数字と線の意味・チェックデジットの計算方法までわかりやすく紹介

スーパーやコンビニの商品に付いているバーコードを見ると、「黒い線の太さがそのまま数字になっているのかな」「0と1の2進数でできているのかな」と疑問に思うことがあります。

実際の仕組みはもう少し面白く、JANシンボルでは最小単位であるモジュールを基準に、黒いバーと白いスペースの幅を組み合わせて数字を表現しています。さらに、読み取った数字が正しいかを確認するため、最後の1桁にはチェックデジットという数学的な仕組みが使われています。

たとえばJANシンボルでは、1つの数字を表す部分は7モジュールで構成されます。GS1 Japanの「JANシンボルマーキングマニュアル」では、数字の「9」を表す一例として、左から3モジュール分のスペース、1モジュール分のバー、1モジュール分のスペース、2モジュール分のバーという組み合わせが紹介されています。3+1+1+2=7となり、1つの数字が7モジュールに収まっていることが実際に確認できます。

この記事では、JANコードを中心に「なぜ線から数字が分かるのか」「13桁なのにバーの中では12桁しか直接表していないように見えるのはなぜか」「チェックデジットはどう計算するのか」まで、実物のバーコードを自分で確認できるところまで掘り下げます。

なお、正確には商品を識別する数字をJANコード、その数字をバーとスペースで機械読取できる形にしたものをJANシンボルと呼びます。JANコードの標準タイプは国際的にはGTIN-13、短縮タイプはGTIN-8と呼ばれます。基本仕様はGS1 Japan「JANシンボル」で確認できます。

バーコードの仕組みを数学で考えるとどうなる?

バーコードは黒い線だけではなく白い部分も情報になっている

バーコードを見ると黒い線ばかりに目が行きますが、JANシンボルでは黒い部分だけを読んでいるわけではありません。黒い部分を「バー」、白い部分を「スペース」と呼び、バーとスペースの両方の幅と並び方が数字を決めています。

これは、線の本数を数えれば数字が分かるという仕組みではありません。たとえば黒い線が2本ある部分でも、間の白いスペースが1モジュールなのか2モジュールなのか、左右のバーが何モジュールなのかによって意味が変わります。

JANシンボルでは、1つの数字を表す7モジュールの中に2本のバーと2つのスペースがあり、それぞれの幅は1〜4モジュールの範囲で組み合わされます。

実物を見ると、「細い黒線」「太い黒線」「細い白い空白」「広い白い空白」が並んでいるように見えます。この違いを最小幅の何倍かとして数えることで、見た目の縞模様を数字として扱えるようになります。

実物で試すならスマホでバーコードを拡大すると分かりやすい

バーコードと数学の関係を体感するなら、家にある菓子箱やペットボトルなど、13桁の数字が印刷されたJANシンボルを1つ用意すると分かりやすくなります。

肉眼では細かな幅の違いを判断しにくいため、スマートフォンでバーコードを真正面から撮影し、写真を拡大してみてください。すると、同じ太さに見えていた線にも幅の違いがあり、白いスペースにも細い部分と広い部分があることに気づきます。

ただし、スマートフォンの写真から正確な規格寸法を測定することはできません。レンズの歪みや撮影角度が入るためです。ここで行うのは「バーとスペースが一定の最小幅の倍数で構成されている」という仕組みを観察するための簡易的な確認です。

印刷したJANシンボルがJIS規格に適合しているかを正式に確認する場合は、専用のバーコード検証機を使う必要があります。GS1 Japanも、規格適合の確認にはバーコード検証を行うよう案内しています。詳しくはGTIN(JANコード)の作成手順で確認できます。

バーコードリーダーは光の反射率の違いを利用する

バーコードが読める理由は、黒と白の見た目だけではありません。GS1 Japanではバーコードを、光の反射率の違いによって情報を機械で自動的に読み取れるよう表現したものと説明しています。

一般的なJANシンボルでは、白いスペースは光を比較的よく反射し、黒いバーは反射率が低くなります。読み取り装置は、この明暗の変化からバーとスペースの境界を認識します。

レーザー方式ならバーコード上を光で走査し、戻ってきた反射光の変化を電気信号へ変換します。カメラ方式では画像として取得し、明暗や位置関係を解析します。方式は違っても、バーとスペースの情報を信号へ変換し、規則に従って数字へ戻す点は共通しています。

このため、黒と白の差が小さすぎると読み取りにくくなります。白地に黒いバーが一般的なのは、単なるデザイン上の慣習ではなく、十分なコントラストを確保しやすいからです。

JANバーコードを拡大し黒いバーと白いスペースの幅の違いが分かる写真

バーコードと数学にはどんな関係がある?

最小単位のモジュールを基準に幅を数える

JANシンボルを数学的に理解する鍵になるのが「モジュール」です。モジュールとは、バーコードを構成する最小の幅を表す単位です。

最小幅をXとすると、バーやスペースは1X、2X、3X、4Xという幅で構成されます。そして1つの数字を表すキャラクタには合計7Xを使用します。

GS1 Japanのマーキングマニュアルに掲載されている数字「9」の例は非常に分かりやすくなっています。

順番 部分 幅
1 スペース 3X
2 バー 1X
3 スペース 1X
4 バー 2X
合計 1つの数字 7X

このように考えると「黒線の太さで数字を読む」というより、黒白を含めた4つの要素の幅を数え、その組み合わせを数字へ対応させていると理解できます。

規格上の詳しい構造はGS1 Japan「JANシンボルマーキングマニュアル」から確認できます。

比率が同じでも好きな大きさにしてよいわけではない

数学的には、バーコードを全体的に同じ倍率で拡大すれば、それぞれの幅の比率は変わりません。そのため「大きくても小さくても比率が同じなら読める」と説明されることがあります。

しかし、実際のJANシンボルには寸法の規定があります。基本サイズでは1モジュールの幅が0.33ミリメートルです。GS1 Japanでは基本寸法の0.8倍から2.0倍までの範囲で拡大・縮小できるとしています。

  • 0.8倍:モジュール幅0.264ミリメートル
  • 1.0倍:モジュール幅0.33ミリメートル
  • 2.0倍:モジュール幅0.660ミリメートル

つまり「比率が合っているから0.3倍にしてもよい」ということにはなりません。数学上の相似と、実際に機械が安定して読める規格の範囲は分けて考える必要があります。

バーコードは2進数そのものではない

黒と白という2種類の状態を使うため、「バーコードは0と1の2進数」と紹介されることがあります。考え方には共通点がありますが、JANシンボルを通常の2進数そのものと考えると誤解が生じます。

たとえば数字5を2進数にすると101ですが、JANシンボルでは「101」という3つの状態をそのまま印刷して数字5にしているわけではありません。0〜9にはJANシンボル専用の7モジュールのキャラクタパターンが決められています。

さらにEAN-13では左側と右側でも使うパターンが異なります。そのため、正確には2種類の状態を利用して決められた規則で情報を符号化していると理解するのがよいでしょう。

JANコードの数字と線はどのように対応している?

JANコードとJANシンボルを混同しない

バーコードについて調べていると「JANコード」「GTIN-13」「EAN-13」と似た言葉が出てきます。

名称 意味
JANコード 日本で一般的に使われる商品識別番号の呼び方
GTIN-13 JANコード標準タイプの国際的な名称
JANシンボル JANコードをバーとスペースで表示したバーコードシンボル
EAN-13 13桁JANシンボルの国際的な名称

「13桁の数字」と「縞模様」を同じものとして話すと、95モジュールの説明などで混乱しやすくなります。数字そのものがGTIN-13で、それをEAN-13形式のJANシンボルに変換していると考えると整理できます。

GTIN-13は事業者コード・商品アイテムコード・チェックデジットで構成される

GTIN-13は、GS1事業者コード、商品アイテムコード、チェックデジットで構成されます。

「最初の7桁が必ず会社を示し、残りが商品番号」という説明を見かけることがありますが、現在はGS1事業者コードの桁数が1種類ではありません。GS1 Japanによると、GS1事業者コードには9桁、10桁または7桁があり、それに応じて商品アイテムコードは3桁、2桁または5桁になります。

そのため、手元のJANコードを見ただけで「ここまでが会社番号」と一定の位置で区切るのは適切ではありません。詳しくはGS1 Japan「GTINとは」で確認できます。

13桁なのに7モジュールの数字パターンは12個しかない

EAN-13を詳しく見ると面白い特徴があります。

左側に6個、右側に6個の数字キャラクタがあり、7モジュールの数字部分は合計12個です。ところが表示されているJANコードは13桁あります。

「1桁どこへ行ったの?」となりますが、先頭の1桁は独立した7モジュールとして描かれていません。

EAN-13では、左側6桁にAとBという2種類のナンバーセットを使います。どの位置でAを使い、どの位置でBを使うかという組み合わせが先頭1桁を表しています。右側にはCというナンバーセットを使います。

つまり、バーコードは数字そのものだけでなく「どの符号パターンを選択したか」にも情報を持たせています。ここは「バーコード 仕組み 数学」で調べると特に面白い部分です。

95モジュールはバーコード全体の幅ではない

EAN-13の構造を計算してみます。

左側6桁は6×7=42モジュール、右側6桁も42モジュールです。さらに左端3モジュール、中央5モジュール、右端3モジュールのガードパターンがあります。

3+42+5+42+3=95モジュール

この計算からEAN-13は95モジュールと説明されます。

ただし、ここでよくある勘違いがあります。95モジュールは、左右に必要な余白であるクワイエットゾーンを含んでいません。

GS1 Japanのマーキングマニュアルでは、標準タイプについて左側11X、右側7Xの余白が示されています。そのため、基本的な横方向の全構成は、

11+95+7=113モジュール

です。

基本モジュール幅0.33ミリメートルなら、

113×0.33=37.29ミリメートル

となります。GS1 Japanが示しているJANシンボル標準タイプの基本横幅37.29ミリメートルと一致します。

「95×0.33なのに37.29ミリにならない」と計算途中で疑問に思った場合は、クワイエットゾーンを忘れていないか確認してみてください。

EAN-13の左クワイエットゾーン、左側6桁、中央ガード、右側6桁、右クワイエットゾーンを示した図

チェックデジットとは?バーコードに使われる数学の仕組み

最後の1桁は商品情報ではなく計算で決まる

GTIN-13の最後の1桁はチェックデジットです。商品名や価格、商品の種類を表しているわけではありません。

前の12桁に決められた重みを付けて計算し、その結果から最後の1桁を決めます。入力や読み取りで数字が変わった場合に、計算結果が合わなくなることで誤りを検出しやすくします。

GS1ではモジュロ10方式が使われます。公式の計算方法はGS1 Japan「チェックデジットの計算方法」で確認できます。

公式例456995111617で実際に計算してみる

GS1 Japanが公開している例「456995111617」を使ってチェックデジットを求めます。

求めるチェックデジットを右端の1桁目と考え、右側から桁番号を付けます。チェックデジットを除いた12桁のうち偶数桁側の数字を足します。

5+9+5+1+6+7=33

これを3倍します。

33×3=99

残りの数字を足します。

4+6+9+1+1+1=22

2つを合計します。

99+22=121

121の1の位は1なので、10から1を引きます。

10-1=9

チェックデジットは9となり、完成したGTIN-13は4569951116179です。

手元のJANコードを自分でチェックする手順

手順 確認すること
1 バーコード下の13桁の数字を書き写す
2 最後の1桁だけ別にしておく
3 残り12桁を右側から見て交互に3倍と1倍で計算する
4 合計を10の倍数にするために必要な数字を求める
5 求めた数字と実物の最後の1桁を比較する

自分の計算が正しいか不安な場合は、GS1 Japanの公式ページにチェックデジット自動計算フォームがあります。12桁を入力すればチェックデジットを確認できるため、手計算した後の答え合わせにも使えます。計算式を別の例でも確認したい場合は、バーコードのチェックデジット計算式と手順でJAN・EAN-13の計算方法を整理しています。

チェックデジットで全部の間違いを発見できるわけではない

ここも誤解されやすいポイントです。チェックデジットが一致すれば「絶対に正しいJANコード」と保証されるわけではありません。

GTINの方式は1桁だけが別の数字になったような単純な誤りには強く、1桁の置換誤りは検出できます。一方、複数の数字が同時に変化し、その影響が計算上打ち消し合った場合などにはチェックを通る可能性があります。

数学的に興味深い例として、隣り合う数字を入れ替えた場合を考えます。2つの位置の重みが1と3なら、数字aとbを入れ替えたときの差は、

2×(a-b)

に相当します。aとbの差が5なら変化量は10の倍数になるため、モジュロ10では差が消えてしまいます。

たとえば1と6、2と7、3と8、4と9、0と5のように差が5の数字を隣同士で入れ替えるタイプの誤りは、位置によってはチェックデジットだけでは検出できません。

チェックデジットは誤りを減らすための検出手段であり、暗号でも、番号の実在性を証明する仕組みでもありません。

バーコードを数字から作り読み取るまでの流れ

商品番号を決めたあとJANシンボルへ変換する

商品にJANシンボルを表示する場合、単に好きな13桁の数字を決めてバーコード化すればよいわけではありません。

商品識別に利用するGTINには設定ルールがあります。GS1事業者コードを利用して商品アイテムコードを設定し、チェックデジットを計算してGTIN-13を完成させます。

その13桁をEAN-13として表現するとき、左側6桁では先頭数字に対応したA/Bナンバーセットを選び、中央にセンターガード、右側6桁にCナンバーセットを配置します。

さらに左右のクワイエットゾーン、サイズ、バーの高さ、色などの条件を満たして印刷します。

スキャナーでは逆の処理が行われる

読み取り側では逆です。

  1. バーとスペースの明暗を取得する
  2. ガードパターンなどからJANシンボルの構造を確認する
  3. 7モジュールごとのパターンを数字へ変換する
  4. 左側のA/Bパターンから先頭数字を復元する
  5. 13桁の数字を得る
  6. チェックデジットが計算上整合するか確認する

こうして得られるのは基本的に商品識別番号であるGTINです。

価格はJANコードの中に入っている?

スーパーでバーコードを読むと価格が即座に表示されるため、「JANコードの13桁の中に980円などの価格が入っている」と考えてしまいがちです。

通常の商品用GTINでは、その考え方は違います。JANコードは商品を識別するためのキーとして使われ、POSシステム側の商品マスタに商品名や販売価格などを登録しておきます。

スキャナーで読み取ったGTINをもとに、レジが商品マスタを検索して価格を表示します。

そのため、同じJANコードの商品が店Aでは198円、店Bでは218円で売られていても問題ありません。価格がバーコード自体に固定されているわけではないためです。

スーパーのレジでJANバーコードをスキャンしPOSの商品マスタから価格を呼び出しているイメージ写真

手元のバーコードを5分で確認する方法

まず13桁か8桁かを見る

身近な商品のバーコードを理解したいなら、最初に下に印刷された数字の桁数を数えます。13桁なら一般的なGTIN-13、8桁ならGTIN-8の可能性があります。

ただし「小さい商品だからメーカーが13桁を8桁に削った」と考えてはいけません。

現在のGTIN-8は、標準タイプを表示するスペースが確保できない小さな商品など、一定の条件で利用する仕組みです。GS1 Japanでは1アイテムごとにGTIN-8ワンオフキーの貸与を受ける方式を案内しており、13桁のJANコードから適当に5桁を削って8桁にすることはできません。

利用条件についてはGS1 Japan「GTIN-8ワンオフキー申請手続きから利用の流れ」で確認できます。

次に左右の余白を見る

バーコードを観察すると、黒いバーのすぐ横まで文字や模様が迫っていないことに気づきます。この余白がクワイエットゾーンです。

「白い場所なら余っているからロゴを入れても大丈夫」と考えたくなりますが、この余白も読み取りのための構成要素です。

自作パッケージでバーコードの横に文字や枠を寄せすぎると、バーコード本体が正しくても読み取りに影響する可能性があります。

中央のガードパターンを探してみる

EAN-13の中央には5モジュールのセンターガードがあります。左右の数字を分ける目印です。

バーコードを拡大して中央を見ると、数字部分とは異なる区切りが確認できます。さらに両端には3モジュールのガードパターンがあります。

「黒線は全部数字」という見方から、「数字を表す部分と構造を示す部分がある」という見方へ変わると、バーコードの仕組みが急に分かりやすくなります。

最後にチェックデジットを計算する

13桁の最後の1桁を隠し、最初の12桁だけから先ほどの計算方法で答えを出してみてください。実物の最後の数字と一致すれば、チェックデジットがどのように働いているかを自分の手で確認できます。

この作業はバーコードの数学を理解するうえで非常に分かりやすい体験になります。縞模様だけを眺めるよりも、「この最後の数字はほかの12桁から計算で決まっている」と実感できるからです。

バーコードが読めないときは数学的にどこが崩れたかを見る

バーコードが読めない原因を確認するチェック表

見た目・状況 起きている可能性 確認すること
バーの横に文字や枠が近い クワイエットゾーン不足 左右の余白を確保する
線がにじんでいる モジュール幅の境界が崩れている 印刷品質を確認する
透明袋にバーだけ印刷 内容物が透けてコントラスト不足 白などの背景を設ける
赤やオレンジ系のバー 読み取り光との関係で反射差を得にくい 黒バーなど読みやすい配色へ変更する
円筒容器で左右が曲がっている バーやスペースが見かけ上細くなる 表示方向や位置を見直す
デザインを優先し線を加工した 規格パターンが崩れている バーとスペースを元の形へ戻す

GS1 Japanでは、赤系統の色をバーに使うことを避けるよう案内しています。また透明・半透明の包装では、内容物が透けて十分なコントラストを得られない場合があるため、白色などの背景を設ける方法が示されています。

円筒形の商品も注意が必要です。横方向にバーを並べると曲面の左右でバーやスペースが細く見えることがあるため、GS1 Japanの資料では円筒形の商品に「はしご状」で表示する方法が推奨されています。

バーコードでよくある勘違いと失敗例

よくある勘違い 実際はどうなのか
黒線1本ずつに数字が割り当てられている バーとスペースの幅の組み合わせで数字を表す
JANコードは普通の2進数 2状態を使う点は似ているが専用の符号パターンを使用する
EAN-13は13個すべてを7モジュールで表す 直接配置される数字キャラクタは12個で、先頭1桁はA/Bの組み合わせで表す
EAN-13の横幅は95モジュール 95モジュールは余白を除いた本体。基本構成では余白を含め113モジュール
13桁を削ればGTIN-8になる GTIN-8は別途貸与される商品識別コードで、13桁を切り詰めて作れない
最後の数字も商品情報 最後の1桁はチェックデジット
バーコードに商品の価格が入っている 通常はGTINをキーにPOSの商品マスタから価格を取得する
チェックデジットが合えば実在する商品番号 計算上整合することを示すだけで、登録・実在を保証しない

自分で作ったJANシンボルを確認するときの順番

見た目だけで「スマホで読めたからOK」と判断しない

自社商品や個人の商品パッケージ用にJANシンボルを作成する場合、「スマートフォンのアプリで1回読めたから問題ない」と判断するのは危険です。

たまたま特定のカメラや角度で読み取れたことと、POSレジなどさまざまな読み取り環境で安定して使えることは同じではありません。

確認する順番は次のようにすると整理しやすくなります。

  1. GTINそのものが正しく設定されているか
  2. チェックデジットが合っているか
  3. バーコードの倍率が規格範囲か
  4. 左右のクワイエットゾーンが確保されているか
  5. バーの高さを必要以上に削っていないか
  6. 背景とバーのコントラストが十分か
  7. パッケージの曲面や折れ目をまたいでいないか
  8. 必要ならバーコード検証機で品質を確認する

GS1 Japanは印刷したJANシンボルについて、JIS規格X0507に定められたサイズ・品質への適合が必要と案内しています。

GS1標準かどうかを確認したい場合は公式アプリもある

「このバーコードはJANなのか、Code128なのか分からない」といった場合には、バーコードの種類と見分け方でJAN・ITF・Code128などの特徴を見比べると整理しやすくなります。GS1 Japanが提供しているGS1 Japan Scanアプリも確認方法の1つです。

代表的なバーコードを読み取り、GS1標準バーコードかどうかを確認する機能が用意されています。ただし、アプリで読めたことと印刷品質が規格を満たしていることは別なので、商品として正式に流通させるバーコードの品質確認とは分けて考えましょう。

バーコードに使われている数学は難しい?

基本を理解するだけなら高度な数学は必要ない

バーコードは世界中の小売や物流で使われているため、非常に複雑な数学が隠れているように思えます。しかしJANシンボルの基本的な仕組みだけなら、学校で学ぶ数学でも十分に追えます。

数学の考え方 バーコードで使われる場面
足し算 チェックデジットの合計
掛け算 3という重みを掛ける計算
余り モジュロ10によるチェックデジット
比・比例 モジュール幅と拡大縮小
組み合わせ バーとスペースのキャラクタパターン
符号化 数字をバーとスペースへ変換する

特に「7モジュールで1つの数字を作る」と「最後の1桁をモジュロ10で確認する」の2点を理解すると、JANシンボルの数学的な仕組みがかなり見えるようになります。

バーコードの仕組みと数学についてよくある疑問

バーコードの線は数字そのものなの?

線1本が数字1つを意味するわけではありません。JANシンボルでは1つの数字を7モジュールで構成し、その中の2本のバーと2つのスペースの幅の組み合わせによって数字を表します。

「太い線=2、細い線=1」という単純な対応でもありません。黒と白の両方を含めた並び全体を見る必要があります。

JANコードには何桁ある?

日本の商品で一般的なJANコードには13桁のGTIN-13と、一定の条件を満たす小さな商品で使われる8桁のGTIN-8があります。

ただし「バーコード」という大きな分類ではCode128など別規格もあるため、すべてのバーコードが13桁または8桁というわけではありません。

バーコードの最後の数字は何?

GTIN-13では最後の1桁がチェックデジットです。前の12桁から一定の計算式によって決まります。

最後の数字だけを自由に変えると、基本的にはチェックデジット計算と一致しなくなります。

チェックデジットが一致すれば正しい商品?

チェックデジットが一致するのは、数字列が計算規則を満たしていることを示します。それだけで、そのGTINがGS1に正しく登録されている、特定の商品が実在する、表示された会社の商品である、といったことまで保証するわけではありません。

QRコードとJANシンボルでは数学が違う?

JANシンボルは横方向にバーとスペースを配置する一次元シンボルです。一方、QRコードは縦と横にセルを配置する二次元コードです。

特に大きな違いが誤りへの対応です。JANコードのチェックデジットは主に数字列の誤りを検出する仕組みですが、QRコードにはリード・ソロモン符号を利用した誤り訂正機能があります。

QRコードは一部が汚れたり欠けたりしても、設定された誤り訂正レベルと損傷状況の範囲内ならデータを復元できます。JANシンボルとの情報量や読み取り方の違いは、2次元コードとバーコードの違いでも整理しています。仕組みは開発元のデンソーウェーブ「QRコードの誤り訂正機能について」で確認できます。

まとめ|バーコードは「線を読む」のではなく数学的な規則を読んでいる

JANシンボルを一見すると、太さの違う黒い線が並んでいるだけに見えます。しかし実際には、黒いバーだけでなく白いスペースにも意味があります。

1つの数字は7モジュールで構成され、その中の2本のバーと2つのスペースの幅の組み合わせによって0〜9を表現します。標準タイプのEAN-13では数字キャラクタ12個で84モジュール、左右と中央のガードを加えて本体が95モジュールです。

さらに左11モジュール、右7モジュールの基本的なクワイエットゾーンを加えると113モジュールになり、基本モジュール幅0.33ミリメートルなら横幅37.29ミリメートルになります。

13桁なのに7モジュールの数字キャラクタが12個しかないのも間違いではありません。先頭の1桁は、左側6桁でAとBのどのパターンを使うかという組み合わせによって表現されています。

最後の1桁であるチェックデジットでは、1と3の重みを使ったモジュロ10方式によって数字列の誤りを検出しやすくしています。ただし、すべての誤りを100%検出できるわけではありません。

また、JANシンボルの数字そのものに店頭価格が保存されているわけではなく、POSではGTINを検索キーにして商品マスタから価格や商品名を取得します。

手元の商品で仕組みを確かめたい場合は、「13桁か確認する→左右の余白を見る→中央ガードを探す→バーとスペースの幅を観察する→最後にチェックデジットを計算する」という順番がおすすめです。

バーコードの仕組みに使われている数学は、難解な数式ではありません。最小単位、比率、組み合わせ、符号化、掛け算、余りといった比較的身近な考え方を組み合わせることで、毎日大量の商品を高速かつ正確に識別できる仕組みが作られています。

コメント

タイトルとURLをコピーしました