【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サービス作成中。独学されている初心者の方向けに、技術の記事を中心に書いていきます。