EANバーコードの作り方
GD::Barcode::EAN13から、リバース・エンジニアリングしてJAN13バーコードの作成方法を調べた。
なお、ここではコードの妥当性は考えない。先頭から12桁を計算して、チェックデジットである13桁目の数字を決める訳だが、その計算式は別に譲る。
バーコードの基本の基本
JAN13(=EAN(=ISBN13))の場合、1.コードを構成する数字の一つ一つが7桁の2進数に置き換えられ、2.2進数の0の桁が空白、1の桁が黒線に置き換えられる。3.ただし、数字と数字の間に、エラーチェックのためにたまに色々挟まる。
プログラミングをする上で、2の部分はぶっちゃけ何も問題がない。楽なもんである。
3も、ルールはそれほど難しくない。決まりきった作業である。
一番ネックになるのが、1の数字から2進数への置き換えである。これが面倒。ルールのためのルールと言った感じで、覚えにくい。いや、プログラマならそれに慣れて然るべきなんだけれども。
数値から2進数への置き換え
まず、数字を三つのグループに分ける。
1.最も左側、先頭の数字1桁。これをプリフィックスキャラクターと呼ぶ。恐るべきことに、この数字はそのものの形で印刷されることはない。
2.次の6桁を左側と呼ぶ。
3.最後の6桁(5桁+1桁のチェックデジット)を右側と呼ぶ。
プログラム的には、1を0番として、2を1〜6、3を7〜12とするのが覚えやすいかも知れない。
右側の置き換え
順番は前後するが、右側の方が理解やプログラミングの難易度が低いので、こちらを先にする。
右側の置き換えは単純な一対一の置換で、以下の表に従う。
数字 | コード |
---|---|
0 | 1110010 |
1 | 1100110 |
2 | 1101100 |
3 | 1000010 |
4 | 1011100 |
5 | 1001110 |
6 | 1010000 |
7 | 1000100 |
8 | 1001000 |
9 | 1110100 |
小細工はない。
左側の置き換え
左側は単純な置き換えではなく、数字一つに対し二つの置き換え候補があって、都度それを選択していく。
数字 | Odd | Even |
---|---|---|
0 | 0001101 | 0100111 |
1 | 0011001 | 0110011 |
2 | 0010011 | 0011011 |
3 | 0111101 | 0100001 |
4 | 0100011 | 0011101 |
5 | 0110001 | 0111001 |
6 | 0101111 | 0000101 |
7 | 0111011 | 0010001 |
8 | 0110111 | 0001001 |
9 | 0001011 | 0010111 |
このOddとEvenの選択の基準は、最初のプリフィックスキャラクターにより、以下の表に従う。
数字 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
0 | Odd | Odd | Odd | Odd | Odd | Odd |
1 | Odd | Odd | Even | Odd | Even | Even |
2 | Odd | Odd | Even | Even | Odd | Even |
3 | Odd | Odd | Even | Even | Even | Odd |
4 | Odd | Even | Odd | Odd | Even | Even |
5 | Odd | Even | Even | Odd | Odd | Even |
6 | Odd | Even | Even | Even | Odd | Odd |
7 | Odd | Even | Odd | Even | Odd | Even |
8 | Odd | Even | Odd | Even | Even | Odd |
9 | Odd | Even | Even | Odd | Even | Odd |
例えば、プリフィックスキャラクターが0であれば、左側6桁は全てOddの欄で置き換えがなされる。4であれば、1と3と4桁目がOddで、2と5と6桁目がEvenで置き換えがなされることになる。