64c16746.png

954c58c8.png

cbe641f6.png

b04ebea8.png

全世界のファンのみなさまこんにちは
久々にperl書いた、ふなです。

ことの発端はアマゾンである。
アクティブエイガードLiteをアマゾンで売ろうと思った。
で、登録しようとしたのだが、、、
13桁のJANコードを登録してください、と来た。
なしでは登録できないらしい。くそぉー!

なんじゃJANコードって、、、
調べるといわゆるバーコードである。
バーコードを取得しないといけないのか。
面倒くさい、でも、アマゾンが勝手に売ってくれるなら
それも悪くない。

今ではJANコードという名前は廃止され、GS1コードと言うらしい。
これを個人で取得。バーコードの取得方法はわかった。
3年間有効で12000円というお金がかかるようだ。

しばらくして、あなたのJANコード(GS1事業者コード)はこれだよ!という書類が来た。
9ケタの番号である。JANコードは13ケタ、残りはなんだ??

商品番号は000-999の3ケタ使用するらしい。
なるほど001??999の999個が使用可能か。あれ?000は使えるのかな??まあいいや。
9+3=12、うん12桁まではわかった。
あと1ケタは?

それはチェックデジットで1ケタ使う。
いわゆるチェックサムというか、設定されたバーコードが正しいかどうか
判定する用である。

つまり、13ケタのバーコードは
9ケタの事業者コードと3ケタの商品番号コードに1ケタのチェックデジットの合計13ケタ
ということになる。

早速、バーコード自動生成サイトで、作ってみた。
9ケタに001の3ケタ足して、自動でチェックデジットを追加してくれて、13ケタ完成。
その13ケタを別のバーコード自動生成サイトに入れてようやく画像が取得できた。
万歳!っていやいや、手間かかり過ぎだろう。
これを1000回繰り返すとはありえない!!

どうせ使うのは001??999の1000に満たないものだ。
商品を追加するたびにそんな手間はかけられない。
1000個ならもうすでにバーコード画像があってもいいじゃないか。

そこで、1000個の画像を全部作ることを考えてみた。
まず、1から999までのループで回す。
9ケタ+3ケタを作って、それを元にチェックデジットを作って13ケタにする。
13ケタになったら、その数字を使って画像を作る

たったこれだけだ。だが、大変かも。

最初エクセルでやろうとしたが、面倒くさい。
もっと簡単な方法があるはず、ってことで
perl の GD ライブラリを使うことにした。

幸いなことにGDライブラリには13ケタの数字を渡すと
バーコードを作ってくれる関数がある。
あとは12ケタからチェックデジットを算出するプログラムを作ればいいだけだ。

チェックデジットのアルゴリズムは簡単で
数字の偶数番目を全部足して3倍して
数字の奇数番目を全部足して、それも足す。
最後に10で割った余りから10引くとチェックデジットになるのだ。
※0の場合はそのまま0

案外簡単ね。

準備としては GDが必要なライブラリを yum とか cpan でインストールする。
結構、関連するライブラリが入っていないので、要注意。

で、出来たプログラムはこんな感じ
※わざとBUG入りです。

#!/usr/bin/perl
use GD::Barcode::EAN13;

my $count;
$str9 ="458961645";

for ($count = 1; $count < 1000; $count++){
$str3 = sprintf("%03d", $count);
print "count = $count \n";
$str12 =$str9.$str3;
$code = CheckDigitCalc_JAN13 ( $str12);
print "str12 -> code ",$str12," -> ",$code , "\n";
# print GD::Barcode::EAN13->new($code)->plot->png;
$fname=$code.".png";
open( OUT, "> $fname") or die( "Cannot open file: $fname" );
binmode OUT;
print OUT GD::Barcode::EAN13->new($code)->plot->png;
close OUT;
}
exit;

sub CheckDigitCalc_JAN13 {
my $seed = shift;

chomp($seed);
$seed =~ s/^\s+//;
$seed =~ s/\s+$//;

return undef if (length($seed) < 12 || substr($seed, 0, 12) =~ /[^0-9]/);

my $strD = substr($seed, 0, 1);
my $strC = substr($seed, 1, 1);
my $strB = substr($seed, 2, 1);
my $strA = substr($seed, 3, 1);
my $str9 = substr($seed, 4, 1);
my $str8 = substr($seed, 5, 1);
my $str7 = substr($seed, 6, 1);
my $str6 = substr($seed, 7, 1);
my $str5 = substr($seed, 8, 1);
my $str4 = substr($seed, 9, 1);
my $str3 = substr($seed, 10, 1);
my $str2 = substr($seed, 11, 1);

my $sumENN = $str2+$str4+$str6+$str8+$strA+$strC;
my $sumONN = $str3+$str5+$str7+$str9+$strB+$strD;

my $digit = 10 - substr(($sumENN * 3) + $sumONN, -1);
$digit = 0 if $digit => 9;

return(substr($seed, 0, 12).$digit);
}

うむ短い str9 が私の事業者コード。
バーコードの番号がファイル名というシンプルさに
png なので、1画像が200バイト程度しかない超節約。
1000個作っても200KB程度
ZIPで圧縮したら350KB,圧縮する方が容量が大きくなるという
本末転倒なことになるくらい。

1000個全部見たい奇特な人は
http://ftvjapan.ddo.jp/~funa/barcode/
にある。あ、999個だった。まあいいや。
ということで、業者に高い金で頼んでいた人は私に頼めば簡単に画像にして送るのも可能です。
まあ釣り業界に限るけど。
もう少し頑張ればWEBサービスとして公開するのも全然OKなのだが
無料サービスしたとして、何も得がないのでね、、、
自分用のツールにしておきますか、、、


一番面倒臭かった、チェックデジットを自動計算しているのと
画像を全部作っているので、あとでプリンターに印刷して
本体に貼るだけでOKになる。

商品コードは勝手に事業者が管理する方式に変わったらしい。
自動ツールのようなエクセルが配布されているので
これで、管理することになる。エクセルで管理かー、楽ちん。

見てもらえば今後のラインナップが予想できますね。
無事アマゾンに登録出来たら、の話ですけど。

1000個使い切ったら、また新しい事業者コードをもらうらしい。
こんな感じで1000個単位で商品を開発していくんだね。
まあ個人的にはまだまだ使い切らないと思いますが、、、

これが本業じゃなく片手間だから楽しい。
子供を寝かしつけて夜9時から自分が寝るまでの12時までの3時間が勝負。
ぼーっと釣りビジョン見ることもあるし
集中してハンダつけることもある。
その3時間をいかにうまく使うか?

気分がノルと集中してやるんだけど、気分がノラないと
ぼーっとしてしまう。
気分がノルのはやることが明確にわかっていること。

作業自体が3時間出来るわけではなく、準備と片付けと
明日の用意と家事も含んだ3時間なので
大抵2時間程度しかない。
その2時間で完結できるようにするにはどうすればいいか?を
常に考えるので、効率とか仕事の段取りを意識しないと
続きはまた明日、やりかけで広げたまま、が許されないリビング作業なので。

これがいい練習になるんですよ、段取りの。
ということで、バーコードの仕組みの勉強から、linux上の環境構築から、プログラム作成して
無事JANコードも999個のバーコードも作成が終わり。
アマゾンの商品登録の申請完了、JANコードのDB申請まで、これで2時間くらいかかった。

途中何度か仰天ハプニング100連発のテレビ見てしまったな。水かけばばぁとかキャラ作り過ぎ。
面白いからいいけど。息抜きは大事。
今日はバーコードのシール作り&貼りでもしようかな。それともMAX1.5ST作りか?

なんでもやってみないとわからないことは多いですね。
バーコードは比較的枯れた技術ですので、いっぱいライブラリやサンプルプログラムがあるので
比較的流用がしやすい。
昔QRコードを自動生成するWEBサービスやっていたら、
そんな技術が少ないころなので、作り方を教えてくれーという問い合わせがいっぱい来たのを
思い出しました。

ということで、バーコードの自動生成プログラムは案外簡単に出来た、という話でした。
なんでも自分で出来ることは自分でしないとね!
バーコード印刷業者一覧とかいらないじゃん。

じゃあまた!タチウオ絶好調型より数!LTアジもいいね!サバ絶不調!タチウオに期待だ!