Sha256: f6f3ccae46eff9ec79b6d41189f6b2b8703e9d76b2b6714befa1983e967f0900
Contents?: true
Size: 873 Bytes
Versions: 1
Compression:
Stored size: 873 Bytes
Contents
require "cusip_style_luhn_mod_n/version" module CUSIPStyleLuhnModN def self.valid?(str) str[-1] == check_digit(str[0...-1]).to_s end def self.check_digit(s) total = 0 s.split('').reverse.each_with_index do |c, i| value = character_value(c) multiplier = (i % 2).zero? ? 2 : 1 sum_of_digits = digits(value * multiplier).reduce(:+) total += sum_of_digits end total %= 10 total.zero? ? 0 : 10 - total end def self.character_value(c) value = c.ord - '0'.ord return value if value >= 0 && value <= 9 value = c.downcase.ord - 'a'.ord + 10 return value if value >= 0 && value <= 35 raise "Illegal character: #{c}" end def self.digits(n) digits = [] return [0] if n.zero? while n != 0 n, last_digit = n.divmod(10) digits << last_digit end digits.reverse end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cusip_style_luhn_mod_n-0.1.0 | lib/cusip_style_luhn_mod_n.rb |