Module: Luhn::Validator
- Defined in:
- lib/luhn/validator.rb,
lib/luhn/validator/version.rb
Constant Summary collapse
- VERSION =
'0.1.0'.freeze
Class Method Summary collapse
- .checksum(number) ⇒ Object
- .luhn_doubled(number) ⇒ Object
- .split_digits(number) ⇒ Object
- .sum_of(number) ⇒ Object
- .valid?(number) ⇒ Boolean
Class Method Details
.checksum(number) ⇒ Object
5 6 7 8 9 10 11 |
# 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) ⇒ Object
13 14 15 16 17 18 19 |
# 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) ⇒ Object
32 33 34 35 |
# 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) ⇒ Object
21 22 23 24 |
# File 'lib/luhn/validator.rb', line 21 def self.sum_of(number) number = number.to_s.delete('-') split_digits(number).inject(:+) end |
.valid?(number) ⇒ Boolean
26 27 28 29 30 |
# 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 |