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