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

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

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