« 「EurekaLog」が便利そう | メイン | Rubyらしいコードの書き方(入門編) »

ISBN10とISBN13を相互に変換するRubyプログラム

ISBN10とISBN13を相互に変換するRubyプログラム

# ISBN10をISBN13に変換する
def isbn10_to_13(isbn10)
  isbn13 = "978#{isbn10[0..8]}"
  #チェックデジット計算用
  check_digit = 0
  isbn13.split(//).each_with_index do |chr, idx|
    #Integer#even?はActiveSupportによる拡張
    check_digit += chr.to_i * (idx.even? ? 1 : 3)
  end
  #総和を10で割ったものを10から引き、10の場合は0にする
  check_digit = (10 - (check_digit % 10)) % 10
  return "#{isbn13}#{check_digit}"
end

# ISBN13をISBN10に変換する
def isbn13_to_10(isbn13)
  isbn10 = isbn13[3..11]
  check_digit = 0
  isbn10.split(//).each_with_index do |chr, idx|
    check_digit += chr.to_i * (10 - idx)
  end
  check_digit = 11 - (check_digit % 11)
  #計算結果が 10 になった場合、10 の代わりに X(アルファベットの大文字)を用いる。
  #また、11 になった場合は、0 となる。
  case check_digit
  when 10: check_digit = "X"
  when 11: check_digit = 0
  end
  return "#{isbn10}#{check_digit}"
end

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/747

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年05月21日 19:31に投稿されたエントリーのページです。

ひとつ前の投稿は「「EurekaLog」が便利そう」です。

次の投稿は「Rubyらしいコードの書き方(入門編)」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35