Sha256: f9cdb0a2c81d0ac7025ec5f5cf194d47111650df0dd8334fbd22ada6a7692e6f
Contents?: true
Size: 980 Bytes
Versions: 2
Compression:
Stored size: 980 Bytes
Contents
class LuhnBase def initialize number, options = {} @mod, @base = 0, 0..100 @number = number.to_s.scan(/\d/).join @base = options[:base] if options.has_key? :base @mod = options[:mod] if options.has_key? :mod end def check_digit sum / @mod end def * digits digits.times.reduce(self) do |number, digit| number += self.class.new(number, :base => @base, :mode => @mod).check_digit end end def + digit self.class.new(@number += digit.to_s.scan(/\d/).join, :base => @base, :mode => @mod) end def to_s @number.to_s end def == other self.to_s == other.to_s end protected def bases multipliers = ([*@base] * (@number.length/@base.count+1))[0..(@number.length-1)].reverse end def numbers_list @number.chars.map &:to_i end def sum bases.zip(numbers_list).reduce(0) {|total, n| total += before_sum(*n) } end def before_sum base, number base * number end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
brid-0.2.1 | lib/brid/algorithms/luhn.rb |
brid-0.2.0 | lib/brid/algorithms/luhn.rb |