Sha256: eef349c1814f31de8e876e19ed4fac42968e64728186e86770203b295297c8dc
Contents?: true
Size: 1000 Bytes
Versions: 4
Compression:
Stored size: 1000 Bytes
Contents
class Mod11 def initialize number, options = {} options = {:base => 2..11, :mod => 11}.merge options @number = number.to_s.scan(/\d/).join @base = options[:base] @mod = options[:mod] end def check_digit if block_given? yield sum, @mod else ((10 * sum) % @mod) % 10 end end alias :cdigi :check_digit def * digits digits.times.reduce(self) do |number, digit| number += Mod11.new(number, :base => @base, :mode => @mod).cdigi end end alias :>> :* def + digit Mod11.new(@number += digit.to_s.scan(/\d/).join, :base => @base, :mode => @mod) end alias :<< :+ def to_s @number.to_s end def == other self.to_s == other.to_s end private 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 += n[0] * n[1]} end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
brid-0.1.3 | lib/brid/mod11.rb |
brid-0.1.2 | lib/brid/mod11.rb |
brid-0.1.1 | lib/brid/mod11.rb |
brid-0.1.0 | lib/brid/mod11.rb |