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