module CheckDigit::Luhn
Public Class Methods
checksum(num)
click to toggle source
# File lib/check_digit/luhn.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/luhn.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/luhn.rb, line 13 def self.calc(num) digits = num.to_s.reverse.scan(/\d/).map { |x| x.to_i } digits = digits.each_with_index.map { |d, i| d *= 2 if i.even? d > 9 ? d - 9 : d } sum = digits.inject(0) { |m, x| m + x } mod = 10 - sum % 10 mod==10 ? 0 : mod end