Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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;
};
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした