Google Apps Scriptで13桁のISBNを10桁(ASIN)に変換するコード~計算式も

Google Apps Script(GAS)でISBN-13を10桁のISBN-10に変換するコードを作成しました。

13桁のISBNコードから10桁のISBNコードに変換すると、ASINとしてAmazonのリンクも生成することができます。

今回、変換する計算式も紹介しながら、GASによるISBNを変換するサンプルコードを紹介します。

ISBNコードとは

ISBNとは本・書籍を識別するための国際規格の番号です。

書籍に付与されているバーコードのうちの1つがこのISBNコードになっています。

元々ISBNコードは10桁で表現されていましたが、ユニークな数字であるとともに、書籍出版数が増大したことを受け、2007年より13桁のISBN-13に移行されました。

ISBN-13をISBN-10変換するメリット

すでに2007年に移行が進んでいるISBN-13を、わざわざISBN-10に変換する必要があるのでしょうか。

実はISBN-13をISBN-10に変換するメリットがあります。

AmazonはISBN-10をASINとして利用

ネット通販最大手のAmazonでは独自に商品IDを採番して、書籍を含めた様々な商品を管理しています。

ただ、書籍・本のジャンルでは、URLが「https://www.amazon.co.jp/dp/【ISBN-10】」という形式でISBN-10で管理しています。

AmazonではISBN-10をASINという名称で管理しているのですが、ISBN-13では管理しておらず、アクセスすることができません。

そのため、とある書籍のAmazonの商品ページへのリンクを生成したい場合には、ISBN-13をISBN-10に変換する必要があります。

ISBN-13からISBN-10に変換する計算式

ISBN-13からISBN-10に変換するのは簡単な計算式で算出することができます。

ISBN-13→ISBN-10変換手順

  1. 13桁のうち上から3桁と下1桁を取り除く
  2. 残った9桁を上の位の数と10、9、8…2を掛けてそれらの和を取る
  3. 和を11で割って出た余りを11から引いた数を算出し、11の場合は0、10の場合はXとする
  4. 1で算出した9桁の末尾に3で算出した数を付加する

ISBN-13から不要な数字を除去し、チェックデジットと呼ばれる検査数字を計算し、末尾に追加するという4Stepで求められます。

ISBN変換の計算例

例えば、Google Apps Script入門書籍として有名な「詳解! GoogleAppsScript完全入門」をISBN変換を試してみたいと思います。

詳解! GoogleAppsScript完全入門」のISBN-13は「9784798053769」となっています。

  1. 上3桁の「978」と下1桁の「9」を取り除きます(479805376)
  2. 4×10+7×9+9×8+8×7+0×6+5×5+3×4+7×3+6×2=301
  3. 301を割って出た余りは4、11-4=7
  4. ①で求めた「479805376」の末尾に「7」を付加し、「4798053767

このようにして、ISBN-13からISBN-10は計算することができ、もちろんプログラム的に計算することも可能です。

ISBNを13桁から10桁に変換するGASのコード

13桁のISBNコードを10桁に変換する、Google Apps Script(GAS)のサンプルコードを紹介します。

以下のようなGASでISBNを変換する関数のサンプルを用意しました。

//引数に指定されたISBN13をISBN10(ASIN)に変換する関数
function convertISBN13to10(isbnNumber) {
//ISBN13桁のうち上から3桁と下一桁を取り除いた9桁を取得する
var isbn10=isbnNumber.slice(3,12);
//9桁の数字を1文字ずつ分割して配列に格納する
var data = isbn10.split("");
//計算データの初期化
var calcData=0;
//9桁の各位の数字を数式のように計算して合計する
for(i=0;i<data.length;i++){
calcData += (10-i) * Number(data[i]);
}
//11-(算出した数値を11で割ったときの余り)求める
calcData = 11 - calcData%11;
//計算した数値が11だった場合、0に置き換える
if(calcData == 11){
calcData =0;
}
//それ以外で10だった場合はxで置き換える
else if(calcData == 10){
calcData = "x";
}
//9桁の数字に計算したcalcDataを末尾に付与した値を返却する
return isbn10 + calcData;
}

13桁の数字の中から、上3桁と下1桁を取り除いた9桁を取得します。

下1桁に付与するためのチェックディジットを計算方法に従って算出し、末尾に追加したものを関数の戻り値として返しています。

GASのISBN変換コードを実行

今回用意したISBN-13をISBN-10(ASIN)に変換するGASのサンプルコードを実行してみます。

13桁のISBNコードは文字列として引数にするため、ダブルクオーテーション「"」で囲うようにしてください。

このtest関数を実行すると、実行ログに10桁のISBNが表示されます。

きちんとISBN10(ASIN)を取得できていることが確認できます。

まとめ・終わりに

今回、Google Apps Script(GAS)でISBN-13からISBN-10を算出するプログラムを紹介しました。

Webスクレイピングなどで書籍情報を取得し、Amazonの商品ページを算出したい場合などにASINのISBN-10に変換するケースなどで利用できます。

13桁のISBNは取得しているけど、使いたいのは10桁のISBNの場合は、GASを使った変換プログラムをお使いください。