class BrDocuments::IE::BA

Protected Instance Methods

format_ie(number) click to toggle source
# File lib/br_documents/ie/ba.rb, line 11
def format_ie(number)
  if number.delete('-').length == 8
    number.sub(/(\d{6})(\d{2})/, '\\1-\\2')
  else
    number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
  end
end
valid_check_digit?() click to toggle source
# File lib/br_documents/ie/ba.rb, line 23
def valid_check_digit?
  @number.gsub!(/[\.\/-]/, '')

  weight1 = make_weight(total_size)
  weight2 = make_weight(total_size - 1)

  digital_check2 = digital_check_generator(@number, weight2)
  number = "#{@number[0, body_size]}#{digital_check2}"
  digital_check1 = digital_check_generator(number, weight1)

  @number[-2, 2] == "#{digital_check1}#{digital_check2}"
end
valid_format?() click to toggle source
# File lib/br_documents/ie/ba.rb, line 19
def valid_format?
  valid_8_digits_format || valid_9_digits_format
end

Private Instance Methods

body_size() click to toggle source
# File lib/br_documents/ie/ba.rb, line 60
def body_size
  digital_check_size = 2
  total_size - digital_check_size
end
digital_check_generator(number, weight) click to toggle source
# File lib/br_documents/ie/ba.rb, line 65
def digital_check_generator(number, weight)
  if use_digital_check_mod10
    generate_check_digit_mod10(number, weight)
  else
    generate_check_digit(number, weight)
  end
end
generate_check_digit_mod10(values, weights) click to toggle source
# File lib/br_documents/ie/ba.rb, line 86
def generate_check_digit_mod10(values, weights)
  sum = reduce_weights(values, weights)
  mod = sum % 10
  mod.zero? ? 0 : (10 - mod)
end
make_weight(size) click to toggle source
# File lib/br_documents/ie/ba.rb, line 49
def make_weight(size)
  weight = []
  size.downto(2) { |w| weight << w }

  weight
end
position_of_the_element_to_define_module() click to toggle source
# File lib/br_documents/ie/ba.rb, line 78
def position_of_the_element_to_define_module
  if total_size == 8
    0
  else
    1
  end
end
total_size() click to toggle source
# File lib/br_documents/ie/ba.rb, line 56
def total_size
  @number.gsub(/[\.\/-]/, '').length
end
use_digital_check_mod10() click to toggle source
# File lib/br_documents/ie/ba.rb, line 73
def use_digital_check_mod10
  position = position_of_the_element_to_define_module
  @number[position].to_i <= 5 || @number[position].to_i == 8
end
valid_8_digits_format() click to toggle source
# File lib/br_documents/ie/ba.rb, line 44
def valid_8_digits_format
  regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
  regex.match(@number).present?
end
valid_9_digits_format() click to toggle source
# File lib/br_documents/ie/ba.rb, line 38
def valid_9_digits_format
  regex_mask1 = /^(\d{7}\-\d{2})$|^(\d{9})$/
  regex_mask2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
  regex_mask1.match(@number).present? || regex_mask2.match(@number).present?
end