Sha256: 66f73fdddebbaf3e2a66b67dfb13eca03ac4c1ebe862c64d64bb72b3e39027af
Contents?: true
Size: 637 Bytes
Versions: 154
Compression:
Stored size: 637 Bytes
Contents
class Luhn def self.create(number) test_number = number * 10 luhn = Luhn.new(test_number) return test_number if luhn.valid? test_number + 10 - (luhn.checksum % 10) end attr_reader :number def initialize(number) @number = number end def addends numbers = [] number.to_s.reverse.split('').map(&:to_i).each_with_index do |n, i| if i % 2 == 0 numbers << n else value = n * 2 value -= 9 if value > 9 numbers << value end end numbers.reverse end def checksum addends.inject(0, :+) end def valid? checksum % 10 == 0 end end
Version data entries
154 entries across 154 versions & 1 rubygems