バーコードをjavascriptで作ってみた



ふと、バーコードってどうやって作るんだろうと疑問に思って調べたら、
英語のWikipediaにのってました。
参照→Wikipedia: European Article Number


なるほど、単純に7桁ずつのグリッドになってて、0と1で塗り分けてるんですね。
仕様を作る時は誤読を少なくするような苦労があったんだと思いますが、仕様に沿って作るのは単純作業のようです。
C#で作ったら簡単だったので、javascriptにして動くようにしてみました
ポカミスを繰り返して以外に大変でした。やっぱjavascriptは向いてないな。
JISは読んでいないので細かい仕様は分からないのですが、一応、携帯のバーコードリーダー機能では読めました。


作り方を説明しますと、例えば4901234567894の場合、
最初が4なので、パターンが LGLLGG RRRRRR になります。
2桁目以降は数字によって7桁のコードがあって、(例えば9の時は0001011)
Lの時はコードそのまま、Rの時は0と1を入れ替えて、Gの時はRの左右を入れ替えて作ります。
最後の桁はチェックデジットで、1桁目から12桁目を奇数の桁の時は3をかけ、偶数の時は1をかけて足した合計の1桁目を10から引いたものになります。(例の場合は4)
あとは、左端と右端に101のコードを、真ん中に01010のコードを入れて、描画すれば完成です。
最初の4の数字は直接は描画されていないんですね。


JAN/EAN以外のバーコードにも対応させるならこの本が良さそうです。
知っておきたいバーコード・二次元コードの知識


認識の方はこれを逆にやればできるのかな?
0と1の閾値の決定が難しそうです。
それに、画像が斜めになっているときは補正する必要がありそうです。
最初の桁の復元は2桁目から7桁目の1の数で決定すればいいのかな。


(4/20 22:00追記
QRコードの解説を見つけました。誤り符合の計算もパターンの配置の仕方もややこしいです。
http://www.swetake.com/qr/
)
(4/22 9:30追記
QRコードのさらに分かりやすい解説を見つけました。久留米工業大学の先生のようです。
http://www.cc.kurume-it.ac.jp/home/general/sibhome/qr/qrindex.html
)