class TaiwanValidator::UbnValidator
Constants
- MULTIPLIER
Public Class Methods
valid?(ubn)
click to toggle source
# File lib/taiwan_validator/ubn_validator.rb, line 5 def valid?(ubn) ubn = ubn.to_s return false unless ubn.match?(/\A\d{8}\z/) 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 end.inject(&:+) results % 10 == 0 || (ubn[6] == "7" && (results + 1) % 10 == 0) end
Private Class Methods
number_digits(number)
click to toggle source
# File lib/taiwan_validator/ubn_validator.rb, line 21 def number_digits(number) number.zero? ? 1 : Math.log10(number).to_i + 1 end
Public Instance Methods
validate_each(record, attribute, value)
click to toggle source
# File lib/taiwan_validator/ubn_validator.rb, line 26 def validate_each(record, attribute, value) unless self.class.valid?(value) record.errors.add(attribute, options[:message] || :invalid) end end