Class: TcvknValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/kangal/tcvkn.rb

Instance Method Summary collapse

Instance Method Details

#validate_each(object, attribute, value) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/kangal/tcvkn.rb', line 5

def validate_each(object, attribute, value)

  return if options[:allow_nil] && value.nil?
  return if options[:allow_blank] && value.blank?


  digits = value[0..-2].each_char.map(&:to_i).each_with_index

  checksum =
    digits.reduce(0) do |memo, (digit, idx)|
      rev_idx = 9 - idx
      coeff = [1, 2, 4, 8, 7, 5][rev_idx % 6]
      result = (digit + rev_idx) % 10

      if result.nonzero?
        result = (coeff * result) % 9
        result = 9 if result.zero?
      end
      memo += result
    end

  valid = !invalid_value?(value, 10) && ((checksum + value[-1].to_i) % 10 == 0)

  object.errors.add attribute, (options[:message] || I18n.t(:invalid, :scope => 'kangal.validations.tax_number')) unless valid
end