JANコードをバーコードに描画

## JANコード

知る人ぞ知るだけど、日本ではすべての商品にこのJANコードが振られている。

こんな感じに印刷されている。これはあくまで器械読みができるようにしたものなので、実際はこの4569951116179もしくは49968712という13桁/8桁の数字がすべての商品のユニック識別子になっている。

という訳で、このコードをDBに保存してるのが、いつの間にか印刷が必要になってくるよね?どうすればいいの?

印刷ソリューション1:画像

コードを入力して、画像に変換するWebPageやツールは結構ありましたが、画像になると、Pixelになるので、拡大などには非常に苦手なので、おすすめできない

ソリューション2:フォント

商業利用のソフトの中に、JANコードを印刷できるものがある。ただ、ほとんどが有料なソフトパケージになってる。しかも高い、うん百万円取られるケースもある!

この場合、GPLライセンスのフォントとコードがある。そのコードを使えば、JANコードを綺麗に変換ができる。

13桁のJANバーコード:

4FQJJPL*bbgbhj+

8桁のJANバーコード:

:EJJG*ihbc+

13桁JANコード⇒フォント文字変換のロジック

すべてのクレジットははフランス人のgrandzebuのEAN13ページに行く

JANコードは数字、バーコードに表現するには数字だけだと足りたい。下記の変換ルールが適用される。

  1. 1桁目の数字はそのまま流用(TableDコラムの文字を参照)
  2. 次の6桁の数字はTable1のTable AもしくはTable Bに当てはめる英数字に変換
    • 変換ルールDigit2~7まではTable2にある
  3. *を入れる
  4. 最後の6桁の数字はTable1のTable Cに当てはめる文字に変換
  5. +を入れる
Table1

Table2

上記のルールを適用したら、4569951116179というコードは4FQJJPL*bbgbhj+。フォントを適用したら:

4FQJJPL*bbgbhj+

8桁JANコード⇒フォント文字変換のロジック

  • :を先頭に入れる
  • 先頭の4桁の数字をTable1のTableAの文字に適用
  • *を入れる
  • 末尾の4桁の数字をTable1のTableCの文字に適用
  • +を入れる

49968712が変換して、:EJJG*ihbc+になる。フォントを適用したら:

:EJJG*ihbc+

Ruby code