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

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

ISBN は、International Standard Book Numberの略で、

世界共通で使える、書籍を特定する為の番号。

昔は10桁だったが、番号が枯渇しそうになったらしく、今は13桁に拡張されている。

下位互換のため、過去に発番された10桁の番号を13桁に変換する方法が策定されている。


10桁を13桁に変換する方法

477414813X を例に。

  1. 先頭に978を足して、末尾の1桁を除く

    • 978477414813
    • ※フランス、韓国、イタリアの場合、979を使ったりもする
  2. 先頭の桁から順に1、3、1、3…を掛けて合計する

    • 9*1 + 7*3 + 8*1 + 4*3 + 7*1 + 7*3 + 4*1 + 1*3 + 4*1 + 8*3 + 1*1 + 3*3 = 123
  3. 合計を10で割った余りを10から引く

    • 10 - (123 % 10) = 7
    • ※引き算の結果が10の時は0とする
  4. 1.の末尾に3.の値を添えて出来上がり

    • 9784774148137


10桁を13桁に変換するコード

const toISBN13 = (isbn10) => { 
  // 1. 先頭に`978`を足して、末尾の1桁を除く 
  const src = `978${isbn10.slice(0, 9)}`; 
 
  // 2. 先頭の桁から順に1、3、1、3…を掛けて合計する 
  const sum = src.split('').map(s => parseInt(s)) 
      .reduce((p, c, i) => p + ((i % 2 === 0) ? c : c * 3)); 
 
  // 3. 合計を10で割った余りを10から引く(※引き算の結果が10の時は0とする) 
  const rem = sum % 10; 
  const checkdigit = rem === 10 ? 0 : rem; 
 
  // 1.の末尾に3.の値を添えて出来上がり 
  return `${src}${checkdigit}`; 
}; 

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)