class ValidatesCnpj::Cnpj
Attributes
number[R]
Public Class Methods
new(number)
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 5 def initialize(number) number =~ %r{^(\d{2}\.?\d{3}\.?\d{3}/?\d{4})-?(\d{2})$} @number = number @pure_number = Regexp.last_match(1) @result = Regexp.last_match(2) @cleaned_number = @pure_number.nil? ? nil : @number.gsub(%r{[\./-]}, '') format_number! if @pure_number end
Public Instance Methods
valid?()
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 14 def valid? return true if @number.blank? return false unless @pure_number check_cnpj end
Private Instance Methods
check_cnpj()
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 25 def check_cnpj return false if (@cleaned_number.length != 14) || (@cleaned_number.scan(/\d/).uniq.length == 1) @result == first_digit_verifier + second_digit_verifier end
digit_verifier(rest)
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 47 def digit_verifier(rest) rest < 2 ? 0 : 11 - rest end
first_digit_verifier()
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 31 def first_digit_verifier sum = multiply_and_sum([5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2], @pure_number) digit_verifier(sum % 11).to_s end
format_number!()
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 51 def format_number! @cleaned_number =~ /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/ match1 = Regexp.last_match(1) match2 = Regexp.last_match(2) match3 = Regexp.last_match(3) match4 = Regexp.last_match(4) match5 = Regexp.last_match(5) @number = "#{match1}.#{match2}.#{match3}/#{match4}-#{match5}" end
multiply_and_sum(array, number)
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 41 def multiply_and_sum(array, number) multiplied = [] number.scan(/\d{1}/).each_with_index { |e, i| multiplied[i] = e.to_i * array[i] } multiplied.inject { |s, e| s + e } end
second_digit_verifier()
click to toggle source
# File lib/validates_cnpj/cnpj.rb, line 36 def second_digit_verifier sum = multiply_and_sum([6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2], @pure_number + first_digit_verifier) digit_verifier(sum % 11).to_s end