class BrDocuments::IE::MG

Protected Instance Methods

format_ie(number) click to toggle source
# File lib/br_documents/ie/mg.rb, line 11
def format_ie(number)
  number.sub(/(\d{3})(\d{3})(\d{3})(\d{4})/, '\\1.\\2.\\3/\\4')
end
valid_check_digit?() click to toggle source
# File lib/br_documents/ie/mg.rb, line 20
def valid_check_digit?
  @number.gsub!(/[\.\/-]/, '')

  number1 = "#{@number[0, 3]}0#{@number[3..10]}"
  weight1 = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  digital_check1 = generate_first_digital_check(number1, weight1)

  number2 = "#{@number[0, 11]}#{digital_check1}"
  weight2 = [3, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
  digital_check2 = generate_check_digit(number2, weight2)

  @number[-2, 2] == "#{digital_check1}#{digital_check2}"
end
valid_format?() click to toggle source
# File lib/br_documents/ie/mg.rb, line 15
def valid_format?
  regex = /^(\d{3}\.\d{3}\.\d{3}\/\d{4})$|^(\d{13})$/
  regex.match(@number).present?
end

Private Instance Methods

generate_first_digital_check(values, weights) click to toggle source
# File lib/br_documents/ie/mg.rb, line 36
def generate_first_digital_check(values, weights)
  sum = 0
  weights.each_index do |i|
    number = weights[i] * values[i].to_i
    sum += number < 10 ? number : number.to_s[0].to_i + number.to_s[1].to_i
  end
  next_dozen(sum) - sum
end
next_dozen(number) click to toggle source
# File lib/br_documents/ie/mg.rb, line 45
def next_dozen(number)
  number += 1 while number % 10 != 0
  number
end