class CheckDigit
Check digit generator & validator using UPC barcode algorithm as described in www.gs1.org/barcodes/support/check_digit_calculator
Public Class Methods
calculate_check_digit(number)
click to toggle source
# File lib/minidynamo/check_digit.rb, line 8 def calculate_check_digit(number) (10 - (check_sum(number)%10)) % 10 end
valid?(number)
click to toggle source
# File lib/minidynamo/check_digit.rb, line 14 def valid?(number) digits = to_digits number check = digits.pop check == calculate_check_digit(digits) end
Private Class Methods
check_sum(number)
click to toggle source
# File lib/minidynamo/check_digit.rb, line 22 def check_sum(number) digits = to_digits number values = digits.each_slice(2).map do |x, y| y ||= 0 [x*3, y] end values.flatten.inject(:+) end
to_digits(number)
click to toggle source
# File lib/minidynamo/check_digit.rb, line 32 def to_digits(number) number.to_s.chars.map &:to_i end