module CheckDigit::Verhoeff

Constants

D
INV
P
ZERO_ORDINAL

Public Class Methods

checksum(num) click to toggle source
# File lib/check_digit/verhoeff.rb, line 2
def self.checksum(num)
  CheckDigit::Util.valid_arg(num)
  num.to_i * 10 + calc(num)
end
valid?(num) click to toggle source
# File lib/check_digit/verhoeff.rb, line 7
def self.valid?(num)
  CheckDigit::Util.valid_arg(num)
  calc(num.to_s[0..-2]) == num % 10
end

Private Class Methods

calc(num) click to toggle source
# File lib/check_digit/verhoeff.rb, line 41
def self.calc(num)
  INV[num.to_s.each_byte.reverse_each.with_index.inject(0) { |check,(x,i)|
        D[check][P[i.next % 8][x - ZERO_ORDINAL]]
      }]
end