見出し画像

【python】ASINからISBN13(JAN)を作成するpythonコード【書籍用】

Amazon のAPIを利用していると、ASINをISBN13に変換したいことが多く、調べたら意外と古い情報しかなかったので、まとめておく。
このくらいの処理だったら、APIをかまさずに手元で処理したかった。

ASINとはAmazonが設定している10桁の商品のコードで、書籍の場合は、ISBN10桁のコードの、末尾1桁のチェックデジット違い、で登録されている様子。
ISBNは書籍のバーコードなどにも印字されている、13桁の書籍の商品コード。同様に末尾1桁はチェックデジット。頭の3桁はほぼ978で始まり、ISBN10は978を省いたもの。(例外もあるが)

つまり
ISBN:13桁(978XXXXXXXXXD)
ISBN:10桁(XXXXXXXXXD)
ASIN:10桁(XXXXXXXXXD')
XX〜は同じだが、DとD’は別の数字。

上記が前提知識で、変換については下記より。


<チェックデジットを作成>

ISBN13の末尾1桁、チェックデジットを作成するスクリプト。
12桁分の商品コードに対して、各桁の整数をもとに計算し、最後の一桁を算出している。

# JAN13のチェックデジットを作成する
def checkdigit(code):
    s = str(code)[:12]
    a = 0
    b = 0

    for i in range(0, len(s), 2):
        a += int(s[i])
    #print a

    for i in range(1, len(s), 2):
        b += int(s[i])
    #print b

    d = (a + (b * 3)) % 10
    d = 10 - d 
    if d == 10:
        d = 0
    return d

上記で、12桁目までから、13桁目のチェックデジットdが計算できるので、

#jan12 は13桁ですが、末尾がASINのチェックデジット

jan12 = "978" + asin
checkd = checkdigit(jan12)
jan13 = jan12[:-1] + str(checkd)
            

これでASINから13桁のJANコード(ISBNコード)への変換ができた。


スタートアップ支援と、社内スタートアップをしながら、実務未経験から独学でプログラミング勉強中。主にpython。スクレイピング、機械学習から始めて、最近はDjangoを学習し、WEBサービス作成中。独学されている初心者の方向けに、技術の記事を中心に書いていきます。