Sha256: ef970fcc438f026d152d95d02bfa3f5e4c2af36b532ead1f2243f54d99dbbe50

Contents?: true

Size: 803 Bytes

Versions: 16

Compression:

Stored size: 803 Bytes

Contents

require "petrarca/helpers"


module Petrarca
  module ISBN13

    extend self

    def valid?(isbn)
      isbn = isbn.to_s
      if correct_format?(isbn) && isbn[-1] == calc_check_digit(isbn)
        if isbn.include?("-")
          Helpers.split(isbn) == isbn.split("-")
        else
          true
        end
      else
        false
      end
    end

    def correct_format?(isbn)
      isbn = isbn.to_s.delete("-")
      !!(/\A97[89]\d{9}\d\z/ =~ isbn)
    end

    def calc_check_digit(isbn)
      nums = isbn.to_s.delete("-").split("")[0, 12].map{|x| x.to_i }
      sum = nums.zip([1, 3] * 6).map{|x, y| x * y }.inject(:+)
      check_digit = 10 - (sum % 10)
      check_digit == 10 ? "0" : check_digit.to_s
    end

    def hyphenate(isbn)
      Helpers.split(isbn).join("-")
    end

  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
petrarca-0.5.15 lib/petrarca/isbn13.rb
petrarca-0.5.14 lib/petrarca/isbn13.rb
petrarca-0.5.13 lib/petrarca/isbn13.rb
petrarca-0.5.12 lib/petrarca/isbn13.rb
petrarca-0.5.11 lib/petrarca/isbn13.rb
petrarca-0.5.10 lib/petrarca/isbn13.rb
petrarca-0.5.9 lib/petrarca/isbn13.rb
petrarca-0.5.8 lib/petrarca/isbn13.rb
petrarca-0.5.7 lib/petrarca/isbn13.rb
petrarca-0.5.6 lib/petrarca/isbn13.rb
petrarca-0.5.5 lib/petrarca/isbn13.rb
petrarca-0.5.4 lib/petrarca/isbn13.rb
petrarca-0.5.3 lib/petrarca/isbn13.rb
petrarca-0.5.2 lib/petrarca/isbn13.rb
petrarca-0.5.1 lib/petrarca/isbn13.rb
petrarca-0.5.0 lib/petrarca/isbn13.rb