class BrazilianValidators::Cnpj

Public Class Methods

new(document) click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 3
def initialize(document)
  raise(StandardError, "Not a valid cnpj format") unless document.match(/[0-9]{2}\.[0-9]{3}\.[0-9]{3}\/[0-9]{4}\-[0-9]{2}|\d{14}/)
  document = document.to_s
  document.gsub!(/\D/, "")
  @digits = document[0..11]
  @first_digit_checker = document[12]
  @second_digit_checker = document[13]
end
valid?(document = '') click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 18
def self.valid?(document = '')
  BrazilianValidators::Cnpj.new(document).valid?
end

Public Instance Methods

valid?() click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 12
def valid?
  first_digit = first_check_digit
  second_digit = second_check_digit(first_digit)
  first_digit == @first_digit_checker.to_i && second_digit == @second_digit_checker.to_i
end

Private Instance Methods

first_check_digit() click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 24
def first_check_digit
  array = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
  sum = sum_of_digits(@digits, array)
  remainder = sum % 11
  remainder < 2 ? 0 : (11 - remainder)
end
second_check_digit(first_digit) click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 31
def second_check_digit(first_digit)
  array = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
  sum = sum_of_digits(@digits + first_digit.to_s, array)
  remainder = sum % 11
  remainder < 2 ? 0 : (11 - remainder)
end
sum_of_digits(digits, array) click to toggle source
# File lib/brazilian_validators/cnpj.rb, line 38
def sum_of_digits(digits, array)
  sum = 0
  digits.split("").each_index do |i|
    sum += digits[i].to_i * array[i]
  end
  sum
end