9781861978769bookland / BillPe

書籍の裏のバーコード。これISBNコードと言います。978で始まる数字の13桁からなるバーコードなのですが、古いものだとそうではない10桁のものがあります。
このコードがあるとその本をドンピシャで特定できます。ほとんどの場合は検索キーワードで問題ないのですが、販売サイトによって表記揺れがあったりしてうまく検索できないこともあるかもしれません。

そういったときは製品だったらJANコードEANコード)や書籍だったらISBNで検索すればいいのですが、AmazonAPIを利用する場合は10桁にしてASINコードとして検索するという手もあったので、やってみました。


ISBN13桁を10桁に変換する

下1桁はチェックデジットと言われるももでコードそのものには関係ないのですが、読み取りエラーがないか確認するための数字になります。この数字は特定の計算式があり、それに基づいて算出されます。
JANコードやISBNコードなどのコード体系や歴史を勉強するのも面白いのですが、ここではさくっとPHPで変換したいと思いました。

参考にしたのはここ。

PHPでISBN13とISBN10の相互変換をする。 | Fujitaiju Blog -There is no border in the Internet!-

ISBNTranという関数に引数にISBNコードを入れれば変換後のISBNを返してくれます。ISBN10か13かは関数の中で判断して分岐させてるので、とりあえずISBN渡せばどちらにも変換します。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<?php

    //ISBN13⇒10の変換

    echo ISBNTran(9784534047120) . "<br />";

    //ISBN10⇒13の変換

    echo ISBNTran("477414259X");

    function ISBNTran ($ISBN) {

        if (strlen($ISBN) == 10) {

            //ISBN10からISBN13への変換

            $ISBNtmp = "978" . $ISBN;

            $sum = 0;

            for ($i = 0; $i < 12; $i++) {

                $weight = ($i % 2 == 0 ? 1 : 3);

                $sum += (int)substr($ISBNtmp, $i, 1) * (int)$weight;

            }

            //チェックディジットの計算

            $checkDgt = (10 - $sum % 10) == 10 ? 0 : (10 - $sum % 10);

            return "978" . substr($ISBN, 0, 9) . $checkDgt;

        } elseif (strlen($ISBN) == 13) {

            //ISBN13からISBN10への変換

            $ISBNtmp = substr($ISBN, 3, 9);

            $weight = 10;

            $sum = 0;

            for ($i = 0; $i < 9; $i++) {

                $sum += (int)substr($ISBNtmp, $i, 1) * $weight;

                $weight--;

            }

            //チェックディジットの計算

            if ((11 - $sum % 11) == 11) {

                $checkDgt = 0;

            } elseif ((11 - $sum % 11) == 10) {

                $checkDgt = "X";

            } else {

                $checkDgt = (11 - $sum % 11);

            }

            return substr($ISBN, 3, 9) . $checkDgt;

        }

    }

?>

ちなみにISBN13は頭3桁が978にしか対応してません。まぁ、今はほとんどが978なので問題ないでしょうけど。念のため。

この関数を使えば相互変換できるようです。

今作っているアプリにはそれが相互である必要はない(要は13桁から10桁だけできれば良い)ので、少しカスタマイズ実装して、うまくいきました。

10桁のISBNをASINコードとして利用する

実はAmazonが独自で持っているASINのキーに10桁のISBNコードを入れて検索することが可能です。10桁のISBNはAmazonのASINとして付けます。

これはあらゆるAmazonAPIでASINを必要とするところ(ISBNサポートしているものは必要無いかもしれませんが、一部サポートされていないものもあり)に使うと便利そうです。

13桁のISBNからASINを作成 – WolaWolaより印表:

ASINが判れば「http://www.amazon.co.jp/gp/product/4048684116/」の様に、アマゾンでの商品詳細ページへとリンクを貼ったり、「http://images-jp.amazon.com/images/P/4048684116.09.MZZZZZZZ.jpg」の様に画像を使えたりします。

バーコード利用の手引き GS1事業者コード(JAN企業コード)登録申請書付
B007QQD7BA

俺流amazonの作り方―Amazon Webサービス最新活用テクニック
4756146759

↑この本、EAN,JAN,ASINのこともわかりやすく書かれていました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です