Sha256: cfca5844d773524aad620048b0048bc2e2af5b4640fe55f11e698cd74cf2010a
Contents?: true
Size: 850 Bytes
Versions: 4
Compression:
Stored size: 850 Bytes
Contents
class UbnValidator < ActiveModel::EachValidator MULTIPLIER = [1,2,1,2,1,2,4,1].freeze class << self def valid?(ubn) ubn = ubn.to_s return false if ubn.size != 8 || (ubn =~ /\A\d+\Z/).nil? digits = ubn.chars.map(&:to_i) results = digits.zip(MULTIPLIER).map do |op1, op2| digit = op1 * op2 digit = digit.to_s.chars.map(&:to_i).reduce(&:+) if number_digits(digit) == 2 digit = digit.to_s.chars.last.to_i if number_digits(digit) == 2 digit end.inject(&:+) results % 10 == 0 ? true : false end private def number_digits(number) number.zero? ? 1 : Math.log10(number).to_i + 1 end end def validate_each(record, attribute, value) unless self.class.valid?(value) record.errors.add(attribute, options[:message] || :invalid) end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
taiwan_validator-1.3.0 | lib/ubn_validator.rb |
taiwan_validator-1.2.0 | lib/ubn_validator.rb |
taiwan_validator-1.1.0 | lib/ubn_validator.rb |
taiwan_validator-1.0.0 | lib/ubn_validator.rb |