どうも、うんちです。
仕事でバーコード(JAN, GS1-128)とQRコードを生成する必要があったのでメモ書きしておきます。
Gem は barby
が必要最低限な機能をいい感じに備えていたので、今回はこれを採用しました。
目次
JANのバーコード生成
JANはEANをもとに作られた仕様なので、EANのライブラリを使うことで生成できます。
出力されるのはバーコードだけのシンプルなものです。
商品パッケージでよく見る数字が食い込んだかっこいいバーコードって作っているんだろう🤔
数字付きのものがほしいときは別途合成させる必要があるので、バーコードをPNGで書き出して mini_magick
などを使って数字を合成させるのが良いかと思います。
↑実際に生成されるバーコード。
GS1-128のバーコード生成
GS1-128のバーコードはCODE128という仕様が使われているので、CODE128のライブラリを使うことで生成することができます。
ただし注意点として、GS1-128は純粋なCODE128と区別するためにスタートコードの直後と可変長データの直後に FUNC1
を挿入する必要があります。これがないとバーコードリーダーやシステムによってはGS1-128として扱えず、ロット番号などをパースしないということが発生してしまいます。
このことはこちらのサイトでわかりやすく解説してあります。
GS1-128は、通常のCODE128と区別するため、スタートコード(CODE-A~C)のすぐ後に[FNC1]( ファンクション1)を付加するように決まっています。 アプリケーション識別子の後に続くデータの桁数が可変長である場合にも、データの区切りを表すため、[FNC1]が付加されます。
↑実際に生成されるバーコード。
こちらも数字なしのシンプルなバーコードが生成されます。
数字付きのものがほしいときは別途合成させる必要があるので、バーコードをPNGで書き出して mini_magick
などを使って数字を合成させるのが良いかと思います。
この例ではGTINのみ(16桁)ですが、アプリケーション識別子とともにロット番号など様々な情報を追加することができます。
QRコードの生成
↑実際に生成されるQRコード。
barby
を使ってQRコードを生成するには rqrcode
も一緒に追加する必要があります。
2つのgemを使ってやるくらいなら1つのgemで済むものがいいと思い探しましたが、結局このやり方に落ち着きました。
バーコード生成と統一感がでてわかりやすいですし、実際に記述量が増えるわけでもないのでこれでいいと思います。