[Javascript] ISBN13 を ISBN10 に変換する方法

[Javascript] ISBN13 を ISBN10 に変換する方法

ISBN-13 と ISBN-10

ISBN – Wikipedia

ISBN は書籍の識別用に設けられている国際規格のコードです。ISBN には10桁の旧規格(ISBN-10)と13桁の現行規格(ISBN-13)があります。

2007年以降 ISBN-10 は新たに発番されておらず、新刊書には ISBN-13 が必ず発番されるようになっています。

基本的に ISBN-13 が新しい規格なのでこちらを使用するべきですが、Amazon では旧規格の ISBN-10 を使って商品ページにアクセスでるリンクが作れます。なので変換ができると便利な場面があります。

https://www.amazon.co.jp/dp/{ISBN-10}

上のようなリンクで書籍の販売ページにアクセスできます。

ISBN-13 を ISBN-10 に変換する

ISBN-13 の先頭3桁は接頭記号(978)で、末尾1桁はチェックデジットです。それ以外のあいだ9桁が ISBN-10 のデータに対応します。ISBN-10 も末尾1桁がチェックデジットになります。

したがって ISBN-13 の4桁目から12桁目までの9桁に、その9桁のを使って計算したチェックデジットを付け足した10桁が ISBN-10 になります。

チェックデジットの計算は 上位の桁から10,9,8..2を掛けてそれらの和を取り、11で割って出た余りを11から引く という計算で求まります。

では 9784915512377 という ISBN-13 を例として ISBN-10 に変換してみます。ちなみに ハリー・ポッターと賢者の石 の ISBN-13 です。

Javascriptで変換関数を実装

ISBN-13 を ISBN-10 に変換する関数を Javascript で実装します。

function convertToIsbn10(isbn13) {
    const sum = isbn13.split('').slice(3, 12).reduce((acc, c, i) => {
        return acc + (c[0] - '0') * (10 - i);
    }, 0);
    const checkDigit = 11 - sum % 11;
    const isbn10 = isbn13.substring(3, 12) + checkDigit.toString();
    return isbn10;
}

const isbn10 = convertToIsbn10('9784915512377');
console.log(isbn10); // 4915512371

slice(3, 12) で3桁目から12桁目までの9桁を reduce() を使って計算した和を求めます。c[0] - '0' の部分は文字を整数値に変換しています。

最終的に求めた和を11で割った余りを11から引いてチェックデジットを求まります。

最終的に3桁目から12桁目までの9桁の後ろに求めたチェックデジットを付け足して ISBN-10 になります。

Amazon の商品ページの登録情報に ISBN-13 と ISBN-10 が載っているので確認に使えます。

こんな感じです。

以上。

Javascriptカテゴリの最新記事