Amazon Web Services を使ったバーコードによる商品検索

作成日:2004.11.22
更新日:2006.12.30

What's New

1. バーコードリーダー

秋葉原の若松通商でフリーテックの USB 接続 バーコードリーダー FT-005USB を購入(税込み価格 15,540 円)。 このバーコードリーダーは PS/2 接続版(10,290円) が基本で、 USB 版はコードの中腹に PS/2 → USB 変換器が入っている。 (PS/2 接続版) + (安い PS/2→USB 変換器) の方がお安くてお得かもしれないが、 コードがごちゃごちゃするのが嫌なので USB 版を選択。

バーコードリーダー:FT-005USB バーコードリーダー:FT-005USB

バーコードリーダーは基本的には USB 接続されたキーボードとして認識され、 バーコードを読み込むと一連のキーボード入力に変換される。 設定の変更は附属のマニュアルに書かれた特殊なバーコードを読み込むことで可能になる。

ちなみに FT-005USB の EAN-13 は 91020010060930

バーコードリーダーを売っているオンラインショップ

楽天:PC-POSのエフ系システム
PC-POSのエフ系システム
楽天:パソコンPOSセンター
パソコンPOSセンター
楽天:エス・アール
エス・アール

2. バーコードの読み方

EAN-13/JAN-13

国内に流通するほとんどの商品に貼られているバーコードは EAN (European Article Number) と呼ばれる (日本では JAN (Japan Article Number) と呼ばれる)。 バーコードの下に 13 桁の数字が書いてあり、 49 か 45 で始まっていれば JAN-13 だと思ってよい (参考)。

EAN の基本は 2 桁の国コード、5桁のメーカーコード、5桁のアイテムコード、1桁のチェックデジットからなる。 各国に Article Number のメーカーコードを発効してくれる組織があり、 会社(組織) 毎にメーカーコードを取得する。 アイテムコードは組織内で自由に付けてもかまわない。 日本に割り振られた国コードは 49 と 45 となっている (代表的な国コード)。 EAN のチェックデジットは EAN コードが正しく読み取れているかどうかを確認するために存在する。 チェックデジットを除く 12 桁に対して、 以下のような計算を行うことで求めることができる。

  1. まず 12桁を奇数桁と偶数桁に分ける(最も右側にある桁は奇数桁と想定している)
  2. 奇数桁の和を求め、それを A とする。
  3. 偶数桁の和を求め、それを B とする。
  4. (A * 3 + B) % 10 を求め、それを C とする (% は剰余演算)
  5. (10 - C) % 10 を計算する。これがチェックデジットとなる。

例えば 451915700189? という 最後のチェックデジットが分からない EAN コードがあった場合、 以下のように計算して 2 が得られる。

 5 9 5 0 1 9 ← 奇数桁(和は29)
451915700189                   →  (29 * 3 + 21) % 10 = 8(10 - 8) % 10 = 2
4 1 1 7 0 8  ← 偶数桁(和は21)

P.S.
2005 年からは北米も 8桁の UPC から 13桁の EAN と同仕様に切り替わる。
それに伴い EAN の名称が GS1 に変更になるそうだ。 JAN は GS1 Japan ということになる。

書籍の EAN コード

書籍には ISBN コードと呼ばれる 10 桁のコード体系が、 EAN が制定される前から存在していた。 そこで EAN-13 では書籍だけを特別扱いし、 先頭が 978 で始まる EAN-13 コードの中に ISBN コードをほうり込んでいる。

先頭が 978 で始まる EAN-13 は、 続く 9 桁の数字が ISBN 部で、 最後の1桁がチェックデジットになる。 チェックデジットの計算方法は上と同じ。

ISBN は 10 桁なのでこのままでは1桁足らないのだが、 ISBN の最後の1桁はチェックサムなので、 他の9桁から再計算することができる。 ISBN をあらわす EAN-13 では ISBN 側のチェックサムは省略して記録する。 今、 ISBN 部の 9桁が N1N2N3N4N5N6N7N8N9 だとすると、10桁目のチェックサムは以下の計算式によって求まる。

 (N1 * 1 + N2 * 2 + N3 * 3 + N4 * 4 + N5 * 5 + N6 * 6 + N7 * 7 + N8 * 8 + N9 * 9) % 11 

ただし、上の値が 10 になった場合は "X" と読み替える。

EAN-13 から ISBN の変換を Perl で書くと、 以下のような関数になる。

sub tran_jan13_into_isbn {
    my ($code) = @_;
    my ($isbn) = ($code =~ /^978(\d{9})\d$/);

    if ($isbn) {
	my ($n1,$n2,$n3,$n4,$n5,$n6,$n7,$n8,$n9) = 
	    ($isbn =~/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/);

	my  $sum = 1*$n1+2*$n2+3*$n3+4*$n4+5*$n5+6*$n6+7*$n7+8*$n8+9*$n9;
	my  $rem = $sum % 11;
	if ($rem == 10) {
	    return sprintf('%9dX', $isbn);
	} else { 
	    return sprintf('%9d%1d', $isbn, $rem);
	}
    }

    return 0;
}

P.S.
2007年から書籍の 10桁の ISBN-10 は廃止になり、 GS1 (旧 EAN-13) の中に ISBN を閉じ込めた ISBN-13 が開始される。 上に述べたように計算方法は EAN-13 と同じで、 978 が先頭に来て 続く 9桁が書籍コードになる。

3. AWS 3.0 / ECS 4.0 を使った商品検索

(ここはぼちぼち書いていきます)

参考

コメント

トラックバック   [Trackback URL: http://www.nminoru.jp/cgi-bin/tb.cgi/memo__barcode__index]
[ふがっさむ] Amazonのリンクを生成する 2009-05-27 (Wed) 10:59:45
blosxomでAmazonのWebサービスを使って書影などを使うプラグインとしてawsxomというのがあります。これを使うとテンプレートを使って書影情報などを差し込めるようになるのですが、時期的な問題で、13桁ISBNが認識できない(ASINは10桁固定のため)が取り残されてました。ということで変換ルーチンを入れたパッチなるものを作成してみました。これで本のISBN(今はほとんど13桁)をそのまま使ってOKとなります。
コメントを書き込む
[1] [まえ] 2016-04-26 08:00:49
いつも重宝させて頂いております。恐れ入りますが、ここ2週間くらい、うまく動作していないようです。
(結果が返ってきません)
お手数ですが、ご確認頂ければ幸甚です。
[2] [管理者] 2016-05-06 09:41:09
御指摘ありがとうございます。
近日中に修正します。

TOP    掲示板    戻る
Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp