class BrDocuments::IE::AP

Public Instance Methods

valid?() click to toggle source
Calls superclass method
# File lib/br_documents/ie/ap.rb, line 9
def valid?
  @number.to_s.size == 9 && super
end

Protected Instance Methods

format_ie(number) click to toggle source
# File lib/br_documents/ie/ap.rb, line 15
def format_ie(number)
  number
end
valid_check_digit?() click to toggle source
# File lib/br_documents/ie/ap.rb, line 24
def valid_check_digit?
  return false if number_to_calculate_digits < 3_000_001

  weight = [9, 8, 7, 6, 5, 4, 3, 2]
  detect_range_digits
  @number[-1] == generate_check_digit(@number, weight).to_s
end
valid_format?() click to toggle source
# File lib/br_documents/ie/ap.rb, line 19
def valid_format?
  regex = /(\d{9})$/
  regex.match(@number).present?
end

Private Instance Methods

detect_range_digits() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/br_documents/ie/ap.rb, line 35
def detect_range_digits
  number = number_to_calculate_digits

  if number >= 3_000_001 && number <= 3_017_000
    @p = 5
    @d = 0
  elsif number >= 3_017_001 && number <= 3_019_022
    @p = 9
    @d = 1
  elsif number >= 3_019_023
    @p = 0
    @d = 0
  end
end
generate_check_digit(values, weights) click to toggle source
# File lib/br_documents/ie/ap.rb, line 55
def generate_check_digit(values, weights)
  sum = reduce_weights(values, weights)
  sum += @p
  mod = sum % 11
  digital_check = 11 - mod
  digital_check = 0 if digital_check == 10
  digital_check = @d if digital_check == 11
  digital_check
end
number_to_calculate_digits() click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/br_documents/ie/ap.rb, line 51
def number_to_calculate_digits
  @number[0, 8].to_i
end