LoginSignup
3

More than 3 years have passed since last update.

Organization

JavaScriptで13桁のISBNを10桁に変換する

前回書いたJavaScriptで10桁のISBNを13桁に変換するの逆バージョン。
13桁も10桁にすることが可能。

const toISBN10 = (isbn13) => {
  // 1. 先頭3文字と末尾1文字を除く
  const src = isbn13.slice(3, 12);

  // 2. 先頭の桁から順に10、9、8…2を掛けて合計する
  const sum = src.split('').map(s => parseInt(s))
    .reduce((p, c, i) => (i === 1 ? p * 10 : p) + c * (10 - i));

  // 3. 合計を11で割った余りを11から引く(※引き算の結果が11の場合は0、10の時はアルファベットのXにする)
  const rem = 11 - sum % 11;
  const checkdigit = rem === 11 ? 0 : (rem === 10 ? 'X' : rem);

  // 1.の末尾に3.の値を添えて出来上がり
  return `${src}${checkdigit}`;
};

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
What you can do with signing up
3