Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@hiro_literal

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

More than 3 years have 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;
};
14
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?