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