class Luhn
Public Class Methods
checksum(number)
click to toggle source
# File lib/luhn.rb, line 3 def self.checksum(number) 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.rb, line 10 def self.luhn_doubled(number) 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.rb, line 26 def self.split_digits(number) number.to_s.split(//).map(&:to_i) end
sum_of(number)
click to toggle source
# File lib/luhn.rb, line 17 def self.sum_of(number) split_digits(number).inject(:+) end
valid?(number)
click to toggle source
# File lib/luhn.rb, line 21 def self.valid?(number) numbers = split_digits(number) numbers.pop == checksum(numbers.join) end