--- title: 'isbn10 –> isbn13' author: kazu634 date: 2007-12-02 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3385;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

 『新版Perl言語プログラミングレッスン入門編』を読んでいます。現在、ハッシュの勉強中。色々できて楽しそうだ。少し慣れてきたら、isbn10をisbn13に変換するPerlスクリプトを作ってみようと思う(「車輪の再発明」なのは承知の上。練習したいのです)。

 というわけで、isbn13の仕組みを調べてみた。Wikipediaによれば、

ISBNは13桁のコードで表され、通常5つのパートからなる。

ISBNnnn – ● – AAAA – BBBB – C

●、A、Bの各部分の桁数は決まっておらず、合計で9桁の範囲内でそれぞれの部分は増減する。

各パートの間は、ハイフン(またはスペース)で区切りを付けるのが正式な表示法である。(区切りを付けなくても書籍を特定する上での問題はない。)

ISBN – Wikipedia

ということらしいので、●-AAAA-BBBBの部分はisbn10と等しいらしい。つまり、図書の場合「978-●-AAAA-BBBB」からある計算式を用いてCを求めることになる。Cの計算式は、例として ISBN978-4-10-109205-□で考えてみると

  1. 9×1 + 7×3 + 8×1 + 4×3 + 1×1 + 0×3 + 1×1 + 0×3 + 9×1 + 2×3 + 0×1 + 5×3 = 9 + 21 + 8 + 12 + 1 + 0 + 1 + 0 + 9 + 6 + 0 + 15 = 82
  2. 82 ÷ 10 = 8 あまり 2
  3. 10 – 2 = 8

ISBN – Wikipedia

となるらしい。つまり(1)の計算は

 ¥{ (9 + 8 + 1 + 1 + 9 + 0) ¥times 1 ¥} + ¥{ (7 + 4 + 0 + 0 + 2 + 5) ¥times 3 ¥} = 82

こんな感じになるわけだから、「(奇数桁の数字の合計×1) + (偶数桁の数字の合計×3)」ということか。

新版Perl言語プログラミングレッスン入門編

新版Perl言語プログラミングレッスン入門編