Class: TaxNumberValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/kangal/tax_number.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/kangal/tax_number.rb', line 5

def validate_each(object, attribute, value)

  ActiveSupport::Deprecation.warn "`tax_number: :true` is deprecated and may be removed from future releases, use `tcvkn: true` instead.", caller

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

  valid = false
  val = value.to_s
  if val.size == 10
    val1 = Array.new
    val2 = Array.new
    last_digit = val[9].to_i

    (0..8).each do |index|
      val1 << ((val[index].to_i + (9 - index)) % 10).to_i
    end

    (0..8).each do |index|
      val2 << ((val1[index].to_i * (2 ** (9 - index))) % 9).to_i
    end

    (0..8).each do |index|
      val2[index] = 9 if (val1[index] != 0 && val2[index] == 0)
    end

    sum = 0

    (0..8).each do |index|
      sum += val2[index]
    end

    if (sum % 10) == 0
      sum = 0
    else
      sum = 10 - (sum % 10)
    end

    valid = (sum == last_digit)

  end

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