module Luhn::Validator

Constants

VERSION

Public Class Methods

checksum(number) click to toggle source
# File lib/luhn/validator.rb, line 5
def self.checksum(number)
  number = number.to_s.delete('-')
  products = luhn_doubled(number)
  sum = products.inject(0) { |t, p| t + sum_of(p) }
  checksum = 10 - (sum % 10)
  checksum == 10 ? 0 : checksum
end
luhn_doubled(number) click to toggle source
# File lib/luhn/validator.rb, line 13
def self.luhn_doubled(number)
  number = number.to_s.delete('-')
  numbers = split_digits(number).reverse
  numbers.map.with_index do |n, i|
    i.even? ? n * 2 : n * 1
  end.reverse
end
split_digits(number) click to toggle source
# File lib/luhn/validator.rb, line 32
def self.split_digits(number)
  number = number.to_s.delete('-')
  number.to_s.split(//).map(&:to_i)
end
sum_of(number) click to toggle source
# File lib/luhn/validator.rb, line 21
def self.sum_of(number)
  number = number.to_s.delete('-')
  split_digits(number).inject(:+)
end
valid?(number) click to toggle source
# File lib/luhn/validator.rb, line 26
def self.valid?(number)
  number = number.to_s.delete('-')
  numbers = split_digits(number)
  numbers.pop == checksum(numbers.join)
end