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