バーコードの原理(JANコード)
2007年2月24日(土)
バーコードとは、幅の異なるスペース(白)とバー(黒)で数値や文字を表す縞模様状の識別子のことです。

バーコードのなかで有名なのがJAN(Japanese Article Number)コードです。JANコードは、日本で最も普及している商品識別コードおよびバーコード規格のひとつで、
国コード + メーカコード + 商品コード + チェックデジットの13桁から成っています。
(2桁) (5桁 or 7桁) (5桁 or 3桁) (1桁)
JANコードは商品名や価格などの商品情報を蓄積したデータベース(JICFS/IF-DB)システムと連動しています。商品メーカーが自社の商品ひとつひとつにJANコードを与え、それぞれの情報をデータベースに入力しておくと、卸売業者や小売業者ではJANコードを読み取るだけで、その商品の様々な情報が取得できます。つまり、卸売業者や小売業者側での商品情報の入力の手間が省けるため、商品管理がとても楽になります。
JANコードは113個のモジュールを並べることで作られます。
1モジュールとは、幅0.33 mmの黒線(バー)もしくは白線(スペース)のことです。そして1つの数字は7つのモジュールで表されます。さらに左右にマージンとガードバー、中央にセンターバーを配置することで、13桁のJANコードが完成します。

JANコードの場合、1つの数字は、2本の黒線と2本の白線を用いて表されます。そして、この黒線と白線の幅を変えることで「0〜9」の数字を表しています。つまり、7モジュール分の面積における「黒と白の塗り分け方」が、それぞれ「0〜9」を意味することになります。
例えば、「0」は7モジュール分の面積を「3:2:1:1」またはその逆並びの「1:1:2:3」の比で分けたもの、と決められています。この条件で作成できるバーコードは、以下の4つが考えられます。
| 例【1】 | 例【2】 | 例【3】 | 例【4】 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 奇数パリティ | 偶数パリティ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 左用 | 使用しない | (左用) | 右用 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
黒いバーが奇数個あるものを奇数パリティ(【1】と【2】)、偶数個あるものを偶数パリティ(【3】と【4】)と呼びます。基本的に、奇数パリティを用いて左側の数字を、偶数パリティを用いて右側の数字を表します。これによって、スキャナはバーコードをどの向きからスキャンしても正しく左右を判断することができるわけです。
下の表は、各数字に対応するバーコードを示したものです。
| 数字 | 面積比 | 奇数パリティ | 偶数パリティ | |
| 左データ用 | (左データ1桁目用) | 右データ用 | ||
| 0 | 3:2:1:1 / 1:1:2:3 | 0 0 0 0 | 0 0 0 | 0 0 0 |
| 1 | 2:2:2:1 / 1:2:2:2 | 0 0 0 0 | 0 0 0 | 0 0 0 |
| 2 | 2:1:2:2/2:2:1:2 | 0 0 0 0 | 0 0 0 | 0 0 0 |
| 3 | 1:4:1:1 / 1:1:4:1 | 0 0 | 0 0 0 0 0 | 0 0 0 0 0 |
| 4 | 1:1:3:2 / 2:3:1:1 | 0 0 0 0 | 0 0 0 | 0 0 0 |
| 5 | 1:2:3:1 / 1:3:2:1 | 0 0 0 0 | 0 0 0 | 0 0 0 |
| 6 | 1:1:1:4 / 4:1:1:1 | 0 0 | 0 0 0 0 0 | 0 0 0 0 0 |
| 7 | 1:3:1:2 / 2:1:3:1 | 0 0 | 0 0 0 0 0 | 0 0 0 0 0 |
| 8 | 1:2:1:3 / 3:1:2:1 | 0 0 | 0 0 0 0 0 | 0 0 0 0 0 |
| 9 | 3:1:1:2 / 2:1:1:3 | 0 0 0 0 | 0 0 0 | 0 0 0 |
ここで、私は以前から不思議に思っていたこと、「バーコードは13桁なのに、バーコードの下には12桁の数字しかない」ことの理由を。
例えば上のバーコードの図面は一般的なバーコードですが、バーコードの下には12桁のみしか書かれていません。また、モジュールも12桁分しかありません。しかし、バーコードリーダで読み込むと、バーコードの外に書かれている1桁目の「0」を含む13桁が表示されます。いったい「0」はどこに埋め込まれているのでしょうか。
答えは、偶数・奇数パリティの組み合わせで1桁目を表しているため。つまり、バーコードの外に書かれている1桁目の数字は、「左側の6つの数字を表すモジュールの、どの部分を奇数パリティにし、どの部分を偶数パリティにするか」によって表されていたのです。
例えば、左側の全ての数字を奇数パリティで「奇奇奇奇奇奇」のように表すと1桁目が「0」、左から「奇奇偶奇偶偶」のときは1桁目が「1」になります。(奇数パリティは、上の表の「左データ1桁目用」を用います。)
1桁目を表す偶奇パリティの組み合わせは次のようになります。
| 1桁目 | パリティの組み合わせ |
| 0 | 奇 奇 奇 奇 奇 奇 |
| 1 | 奇 奇 偶 奇 偶 偶 |
| 2 | 奇 奇 偶 偶 奇 偶 |
| 3 | 奇 奇 偶 偶 偶 奇 |
| 4 | 奇 偶 奇 奇 偶 偶 |
| 5 | 奇 偶 偶 奇 奇 偶 |
| 6 | 奇 偶 偶 偶 奇 奇 |
| 7 | 奇 偶 奇 偶 奇 偶 |
| 8 | 奇 偶 奇 偶 偶 奇 |
| 9 | 奇 偶 偶 奇 偶 奇 |
以上の仕組みにより、バーコードの外に書かれた1桁目、バーコードの下に書かれた数字の12桁、あわせて13桁の数字が表現されます。
これはなかなかおもしろい。