13
14

More than 5 years have passed since last update.

ISBNコードをAmazonのURIに変換(JavaScript)

Last updated at Posted at 2016-01-30

Amazonの商品ページリンクの構成

Amazonの商品URIは「Amazon共通のURI」+「ASINコード」です。
このうち、書籍(紙の本)のASINコードは「『10桁の』ISBNコード」と等価です。

ISBNコードについて

ISBNコードはかつて10桁でしたが、2007年1月1日より13桁に変更されました。
よって、最近の販売されている本は全て13桁となっています。
このことから、13桁を10桁に変更する必要があります。

ISBNコードの構成

13桁(現行規格)

(上位3桁:接頭記号)+(9桁:書籍)+(1桁:チェックデジット)

10桁(旧規格)

(9桁:書籍)+(1桁:チェックデジット)
9桁部分は、実際の規格ではグループ記号だとか色々と分かれていますが、旧規格・現行規格ともに共通です(洋書はよくわからない)。
但し、チェックデジットは異なります。
つまり「接頭記号を外してチェックデジットを再計算して入れ替える」ことで13桁から10桁に変換できます。

チェックデジットの計算方法

10桁(モジュラス11 ウェイト10-2)

左から計9桁で操作。

  • 左の桁から順に10,9,8,と掛けていき総和を取る。
  • 総和を11で割り、出た余りを11から引く。
  • 出た答えが10ならX、11なら0、それ以外はそのままでチェックデジット。

13桁(モジュラス10 ウェイト3・1)

左から計12桁で操作。

  • 奇数桁、偶数桁を各々で総和をとる。
  • 偶数桁の総和に対し、偶数桁に3を掛けた値を加える。
  • 得られた値を10で割り、出た余りを10から引く。
  • 出た答えが10なら0、それ以外はそのままでチェックデジット。

コード

  • 下記のコードは13桁の誤りをチェックした上で10桁に変換しています。
  • 誤りがある場合、falseを返します。
  • リンク生成用に呼び出す関数として書いています。
  • id は 13桁のISBNコード。
JavaScript

BOOK.isbn = function (id) {
'use strict';
  var a, b, c, i;
  if (id.length === 13) {
    a = 0;
    b = 0;
    for (i = 0; i < 6; i = i + 1) {
      a += Number(id.charAt(i * 2));
      b += Number(id.charAt(i * 2 + 1));
    }
    c = (a + b * 3) % 10;
    if (c === 10) {
      c = 0;
    }
    if (c === Number(id.charAt(12))) {
      c = 0;
      id = id.slice(3, 12);
      for (i = 0; i < 10; i = i + 1) {
        c += Number(id.charAt(i)) * (10 - i);
      }
      c = 11 - c % 11;
      if (c === 10) {
        c = 'X';
      } else {
        if (c === 11) {
          c = 0;
        } 
      }
      id = id + String(c);
      return String('http://www.amazon.co.jp/dp/' + id + '/');
    }
    return false;
  }
  return false;
};
13
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14