module ISBN::Calculator

Constants

VERSION
WEIGHT

Public Class Methods

calculate(isbn) click to toggle source
# File lib/isbn/calculator.rb, line 5
def self.calculate(isbn)
  isbn = (isbn.is_a? Integer) ? isbn : isbn.gsub('-', '').to_i
  return false if ! isbn || ! isbn.to_s.chars.count == 12 || isbn.zero? || isbn.nil?
  checksum = self.weighted_calc(isbn, WEIGHT) % 10
  checksum = checksum.zero? ? checksum : 10 - checksum

  return checksum
end
weighted_calc(number, weight) click to toggle source
# File lib/isbn/calculator.rb, line 14
def self.weighted_calc(number, weight)
                    checksum = 0

                    # if we have 0 after dividing by 10 there is nothing else to do.
                    while number > 0
                            checksum += (number % 10) * (weight % 10)

                            # discard the digits we've summed up already
                            number = number / 10
                            weight = weight / 10
                    end

                    return checksum 
end