JANコードで覚えたこととかメモとか記録とか

今回も JANCODE の件でいきます。

2013年7月21日 14:26:43
当初、 JAN を扱うようになったときに、JANコードのフォントを職場で使用していたものの、490~のようにただ入力してもスキャンできませんでした。
CODE39 の場合は *0123* のようにスタートコードエンドコードの * ではさむと読み込むことができます。
JAN もきっとそうなんだろうなとすぐに予想はできたのですが、それがどこのキーなのかわかりませんでした。
とりあえずキーボードを1個ずつ入力していくと、
0123456789
@ABCDEFGHI
PQRSTUVWXY
<>=
の場所でバーコードが出てきました。 0~9の10個と思いきや30個以上出てきました。しかも全部違う!
これは調べるしかないってことで調べたがどうもよくわからない。
チェックデジットがどうのこうのとかじゃなくて、この13桁のJANコードを JANCODE フォントで表示するときに、どんな文字列組み合わせで入力すればいいのか、っていうのが知りたいのだ。
10回ググって100回読んでやっとわかったので、解説していきたいと思う。
「JAN とは何か」は他のサイト、もしくは一般財団法人流通システム開発センターなるところをご覧いただきたい。 今は、バーコードのフォントをどうやったらピッってできるようにするのか。でいきます。

JANコードは、
【スタートコード】【2つ目】【3】【4】【5】【6】【7】【センターコード】【8】【9】【10】【11】【12】【チェックデジット】【エンドコード】
の、15文字でできています。 13桁の JAN コードは先頭の数字を抜いてできていたのです!←ここ重要
手元にある JAN コードを見てもらえるとわかると思います。最初の数字だけ外れたとこにありますよね。

じゃーなぜ、ピッってやったときに最初の数字が出てくるのか?
日本のコードが49(45)だから自動的に4ってつくんだ!

うーん、正解というか不正解というか。

実は、2つ目の数字から6個(234567つ目、センターの前まで)のバーを読み取って、その組み合わせの結果「4」だから、頭に4と自動的に付与されるんです。
だから、「正解というか不正解」
組み合わせによっては0でもあるし2とか9でもある。
では、2つ目の数字からセンターの前の6個までの数字の組み合わせなのか?
うーん、不正解。
数字ではなく、バーコードの組み合わせが正解!
文頭にバーコードが30個あると言いましたが、「4」という数字を判別するために2種類の0~9のバーコードを使っているんです。
その2種類のバーコードを1つを「k」グループ、もう一つを「g」グループと仮に名前を付けましょう。
んで、その「k」「g」を組み合わせて先頭の数字が0~9の10通りの組み合わせはこうなっています。
※2つ目は先頭の4から2文字目という意味
先頭に付与される数字2つ目3つ目4つ目5つ目6つ目7つ目
4(今回はコレ)
そして、kとgの各数字の時のバーがこれっという風になっています。
※なぜ「k」と「g」と呼ぶかは後述。
※kとgの2種類
数字kグループgグループ
白と黒のバーは略
つまり、上記のローソンのペットボトルの JAN の例でいくと、

1つ目 2つ目3つ目4つ目5つ目6つ目7つ目
2種類の組み合わせ
表示上のJAN
付与される数値kgkkggだから【4】 kの9gの0kの1kの0gの8gの5
となります。

これによって、1種類のバーコードからは先頭の文字を作り出すことはできませんが、

「k」と「g」という2種類のバーコードがあることによって、

同じ数字でも違う組み合わせを作ることができるのです。

4だから【kgkkgg】の組み合わせでもあるし、【kgkkgg】の組み合わせだから先頭の数字は【4】なのです。

残りは、センターバーからエンドまでの6つです。
左側は「k」と「g」の2種類ありましたが、右側は、それとは別の1種類で出来ています。
これがバーコードが30個ある理由です。
スタートバー、センター、エンドを合わせれば33個ですね。
ただ普通に 4901085004074 と入力してもダメなわけです。
先頭の4を抜かし、kgkkggである時の各文字列を入れ、センターバーを入れ、右側の該当する文字を入れ、エンドバーを入れる。
これで JANCODE フォントを使ってピッってできるようになります。
左側の「k」と「g」、そして右側の1種類をキーボード表にしてみましょう。
表示上の数字左側の「k」グループ左側の「g」グループ右側のグループ
スタートコードセンターコードエンドコード
<=>

上記のように割り当てられたバーコードのフォントを使った場合の入力文字列は、
バースタートコード センター 10111213エンドコード
緑茶のJAN 901085   004074 
グループ  右側右側右側右側右側右側>
対応する文字列<9@10HE = PPTPWT>
上記のキーボード表であるとき、入力する文字列は、

となります! これさえわかれば、ちょっとエクセルをかじってる人であれば、VBAで実現できることでしょう。

で、なんで「k」と「g」という風に言ってたのか?
それは、奇数と偶数という意味です。
しかし、前半で奇数偶数と言ってしまうと、「なんで奇数の所に2(4)なんだ?」とか「なんで偶数の所に3(5)が入るんだ?!」
とわかりづらくなってしまいます。

それでは一体なんの奇数・偶数なのかというと、黒いバーの数なんです。


1つのバーは7個のエリア(モジュールと言うらしい)に分かれています。1個のバーに7つあるので7モジュール
上記の9の場合 【白白白黒白黒黒】と黒いバーが3つあります。右側が合体して1ではなく、あくまでもモジュールとして数えます。
3個ありますね。これが先ほどから言っていた奇数のkです。
この様に、バーの数が奇数の時のx、バーの数が偶数の時のxという風に、黒のバーが何個の組み合わせでできているのか?で、
先頭の数字を導き出していたのです。
デジタルでいうと白と黒というより 0か1か ですので、前回示した「略」をここで再度表にします。

黒いバーの数「1」を数えてみてね
数字奇数(kグループ)偶数(gグループ)
00011010100111
00110010110011
00100110011011
01111010100001
01000110011101
01100010111001
01011110000101
01110110010001
01101110001001
0001011
0010111
※残りの数字はめんどくさいので作ってませんw

JANコードがまさか3種類のバーで出来ているとは思っても見ませんでした。
最初の4もバーとしては存在しないってのも知らなかった。
前半の6個で決めていたとは・・・


で、話は続くんだ。
上記の通り、白と黒の位置がわかったということは、自分でフォントも作ってしまえばどうか?!
職場の PC にインストールされたいたフォントなので、家に帰ってきてもなにもできないという事態なのです。
先日書いた 「JANCODE フォントを自分で作ってみた。」という記事がそれなんです。
しかし、まだ未課金だったので公開するこもとできず、ただ作ってみました。という報告だけでした。
今現在は、ローソンのペットの JAN が表示されているとおり、
自分で作った JANCODE フォントでエクセルの VBA で出力した文字列を画像にしたものです。
フォントは完成しているのですが、多少手を加えたいのまだ完ぺきではありません。
バーの下にある数字も載せたいし、ちょっと大きさのバランスもおかしいし。
対応するキー一覧:
※WEB上は全角ですが入力は半角です。
表示上の数字左側奇数左側偶数右側
スタートコードセンターコードエンドコード
エクセルで使用する際に@や、<>、=があるとハイパーリンクやマイナス扱いとなってめんどくさいので、
数字と英語の大文字のみにしています。
今後、数字付きもチャレンジしたい。
このフォントを使用した時のローソン緑茶の JAN は、

となります。

エクセルで変換できるようにする マクロ(VBA) は出来てるけど出来てないので待ってね
エクセルJAN生成君

先日に引き続き JANCODE の件、TTedit を使用して JANCODEフォントを自分で作ってみた。

2013年7月21日 3:28:25
フォントを作成するソフトを探していましたが、結局一番安定なのが TTedit であるようなので、これにしました。
30日の試用期間であれば無料ということなので、やってみた。
後日課金するつもりだ。
課金しないと、たとえ公開しなくてもそのフォントを使用できないことになっています。

上記の画像がバーコードの1つ1つをキーボードの各キーに割り当てたもの。
0030 行の9つは 0~9
0040 行は ABCDと続き、U、そして間をあけ、YZの大文字に割り当てました。
0040 行を1つあけたのは、そこは @ が入っていて、@を利用した場合エクセルだとメールアドレス扱い(ハイパーリンク)となって めんどくさいので人間的にわかりやすく、Aからスタートさせました。
時間ないので、後日書きます。

普通の商品についている JAN の仕組みがようやくわかったので、エクセルでできるかも

2013年7月20日 14:28:06
POSレジみたいなのをエクセルで作ろうって話になったとき、JAN は読めるのに JAN 自体を作成できなかった。
JAN 専用のフォントをダウンロードしても、どうやったらピッとスキャンできるようになるのか、まったくわからなかった。
エクセルで JAN を作るソフトウェアが多数存在するものの、そのほとんどがシェアウェアでお金がかかってしまう。
だったら自分で作ってしまおう!ってことで、 JAN の作り方について調べていても一向に出てこない・・・
しかし、ついに JAN の仕組みをくわーしく解説しているサイトを発見!
ついに意味がわかった!
これによって JAN のフォントさえあれば、ピッってできる文字の組み合わせにして出力することが可能になりました。
エクセルの VBA を使用して作りました。
あとは自作で JAN フォントも作ったりしようかと思ってます!