ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:PEAR:Image_Barcodeを使ってバーコード生成で間違えていたこと

お客さんから、JAN8かJAN13のバーコードを受付時に読み込ませて、処理をしたいが方法はないかと言われたので、

  1. バーコード画像を生成する。
  2. バーコード画像を埋め込んだPDFを生成する。
  3. PDFをメールに添付して対象者に送る。
  4. 添付のPDFを印刷してもってきてもらい、受付でバーコードを読み込ませる。

という案を考えた。

バーコードの生成だけしたことなかったので、できるのか試してみた。

 

バーコード生成を試す

PHPで動作しているシステムに追加する必要があるので、生成方法をさがしたら、PEARImage_BarcodeでJAN13と互換があるEAN13が生成できることがわかった。

 

導入後、

<?php

require_once 'Image/Barcode.php';

Image_Barcode::draw('1234567890123', 'ean13', 'gif');

?> 

を試してみると、簡単にバーコードは生成できたが、ブラウザにバーコードが表示された。

 

<?php

require_once 'Image/Barcode.php';

$img = Image_Barcode::draw('1234567890123', 'ean13', 'gif', false);

imagegif($img,'barcode.gif');

?> 

としたら、barcode.gifというファイルが生成できた。

 

このバーコードを印刷して、バーコードを読み込めるiPhoneアプリで試しても読み込めず。ハンディタイプのバーコードリータで読み込んでも読み込めず。

 間違えていたこと

どうして読めないのかわからないので、JAN13を調べたら、最後の一桁はチェックディジットとして計算しなくてはいけないことがわかった。あわせて、先頭の2桁か3桁が国コードというのもわかった。

チェックデジット計算方式 |JANコード登録│ 財団法人 流通システム開発センター

今回は、先頭を49として、次の5桁を全て0、その次の5桁を10000からの連番として12桁の数値を作ることにした。

このルールから、490000012345のチェックディジットの計算は、

  1. 左から1桁目と数えて、奇数桁の値を足すので、4+0+0+0+2+4 = 10
  2. 左から1桁目と数えて、偶数桁の値を足した結果に3を掛けるので、(9+0+0+1+3+5)*3 = 54
  3. 1.と2.の値を足すので、10+54 = 64
  4. 10から3.の結果の1の位の値を引くので、10-4 = 6 となる。

 

<?php

require_once 'Image/Barcode.php';

$img = Image_Barcode::draw('4900000123456', 'ean13', 'gif', false);

imagegif($img,'barcode.gif');

?> 

として生成した画像を印刷して試したら、iPhoneアプリでも読めたし、ハンディタイプのバーコードリーダでも読み込めた。

 

バーコードの事前勉強をしておけば、無駄な時間を使わずに済んだ。