class Valvat::Checksum::Base

Attributes

vat[R]

Public Class Methods

check_digit_length(len = nil) click to toggle source
# File lib/valvat/checksum.rb, line 8
def self.check_digit_length(len = nil)
  @check_digit_length = len if len
  @check_digit_length || 1
end
new(vat) click to toggle source
# File lib/valvat/checksum.rb, line 13
def initialize(vat)
  @vat = vat
end

Public Instance Methods

validate() click to toggle source
# File lib/valvat/checksum.rb, line 17
def validate
  check_digit == given_check_digit
end

Private Instance Methods

figures() click to toggle source
# File lib/valvat/checksum.rb, line 35
def figures
  figures_str.split('').map(&:to_i)
end
figures_str() click to toggle source
# File lib/valvat/checksum.rb, line 31
def figures_str
  str_wo_country[0..-(self.class.check_digit_length + 1)]
end
given_check_digit() click to toggle source
# File lib/valvat/checksum.rb, line 27
def given_check_digit
  given_check_digit_str.to_i
end
given_check_digit_str() click to toggle source
# File lib/valvat/checksum.rb, line 23
def given_check_digit_str
  str_wo_country[-self.class.check_digit_length..]
end
str_wo_country() click to toggle source
# File lib/valvat/checksum.rb, line 39
def str_wo_country
  vat.to_s_wo_country
end
sum_figures_by(&block) click to toggle source
# File lib/valvat/checksum.rb, line 43
def sum_figures_by(&block)
  figures.reverse.each_with_index.map(&block).inject(:+)
end
sum_of_figues_for_pt_si() click to toggle source
# File lib/valvat/checksum.rb, line 58
def sum_of_figues_for_pt_si
  11 - sum_figures_by do |fig, i|
    fig * (i + 2)
  end.modulo(11)
end
sum_of_figures_for_at_es_it_se(reverse_ints: false) click to toggle source
# File lib/valvat/checksum.rb, line 51
def sum_of_figures_for_at_es_it_se(reverse_ints: false)
  ints = reverse_ints ? [2, 1] : [1, 2]
  sum_figures_by do |fig, i|
    sum_of_squares(fig * (i.modulo(2).zero? ? ints[0] : ints[1]))
  end
end
sum_of_squares(num) click to toggle source
# File lib/valvat/checksum.rb, line 47
def sum_of_squares(num)
  num.to_s.split('').map(&:to_i).inject(:+)
end