Module: Petrarca::ISBN13
Instance Method Summary collapse
- #calc_check_digit(isbn) ⇒ Object
- #correct_format?(isbn) ⇒ Boolean
- #hyphenate(isbn) ⇒ Object
- #valid?(isbn) ⇒ Boolean
Instance Method Details
#calc_check_digit(isbn) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/petrarca/isbn13.rb', line 18 def calc_check_digit(isbn) nums = isbn.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 |
#correct_format?(isbn) ⇒ Boolean
13 14 15 16 |
# File 'lib/petrarca/isbn13.rb', line 13 def correct_format?(isbn) isbn = isbn.delete("-") !!(/\A97[89]\d{9}\d\z/ =~ isbn) end |
#hyphenate(isbn) ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/petrarca/isbn13.rb', line 25 def hyphenate(isbn) ean_prefix = isbn[0, 3] body = isbn[3, 9] check_digit = isbn[12, 1] registration_group, body = Helpers.split_to_parts(body, REGISTRATION_GROUP_RANGES[ean_prefix]) prefix = "#{ean_prefix}-#{registration_group}" registrant, publication = Helpers.split_to_parts(body, REGISTRANT_RANGES[prefix]) [ean_prefix, registration_group, registrant, publication, check_digit].join("-") end |
#valid?(isbn) ⇒ Boolean
9 10 11 |
# File 'lib/petrarca/isbn13.rb', line 9 def valid?(isbn) correct_format?(isbn) && isbn[-1] == calc_check_digit(isbn) end |