Class: CpfCnpjPlus::Validator::Cnpj
- Inherits:
-
Object
- Object
- CpfCnpjPlus::Validator::Cnpj
- Defined in:
- lib/cpf_cnpj_plus/validator/cnpj.rb
Overview
Responsável por validar, formatar e manipular números de CNPJ. Inclui métodos para checagem de validade, geração e formatação.
Class Method Summary collapse
- .calculate_cnpj_digits(base) ⇒ Object
- .calculate_digit(base, fator_index) ⇒ Object
- .char_to_value(char) ⇒ Object
- .cnpj_not_valid?(cnpj) ⇒ Boolean
- .fator_index_1d ⇒ Object
- .fator_index_2d ⇒ Object
- .normalize(cnpj) ⇒ Object
- .valid?(cnpj) ⇒ Boolean
- .valid_length?(cnpj) ⇒ Boolean
- .valid_structure?(cnpj) ⇒ Boolean
Class Method Details
.calculate_cnpj_digits(base) ⇒ Object
36 37 38 39 40 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 36 def self.calculate_cnpj_digits(base) first_digit = calculate_digit(base, fator_index_1d) second_digit = calculate_digit(base + [first_digit], fator_index_2d) "#{first_digit}#{second_digit}" end |
.calculate_digit(base, fator_index) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 50 def self.calculate_digit(base, fator_index) soma = 0 fator_index.each_with_index do |fator, index| soma += base[index] * fator end digit = (soma * 10) % 11 digit = 0 if digit == 10 digit end |
.char_to_value(char) ⇒ Object
32 33 34 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 32 def self.char_to_value(char) char.ord - 48 end |
.cnpj_not_valid?(cnpj) ⇒ Boolean
60 61 62 63 64 65 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 60 def self.cnpj_not_valid?(cnpj) cnpj = cnpj.to_s.gsub(/[^0-9]/, "") %w[00000000000000 11111111111111 22222222222222 33333333333333 44444444444444 55555555555555 66666666666666 77777777777777 88888888888888 99999999999999].include?(cnpj) end |
.fator_index_1d ⇒ Object
42 43 44 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 42 def self.fator_index_1d [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] end |
.fator_index_2d ⇒ Object
46 47 48 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 46 def self.fator_index_2d [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] end |
.normalize(cnpj) ⇒ Object
20 21 22 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 20 def self.normalize(cnpj) cnpj.to_s.upcase.gsub(/[^A-Z0-9]/, "") end |
.valid?(cnpj) ⇒ Boolean
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 8 def self.valid?(cnpj) cnpj = normalize(cnpj) return false unless valid_length?(cnpj) return false if cnpj_not_valid?(cnpj) return false unless valid_structure?(cnpj) base = cnpj[0..11].chars.map { |c| char_to_value(c) } dv = cnpj[12..13] dv == calculate_cnpj_digits(base) end |
.valid_length?(cnpj) ⇒ Boolean
24 25 26 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 24 def self.valid_length?(cnpj) cnpj.length == 14 end |
.valid_structure?(cnpj) ⇒ Boolean
28 29 30 |
# File 'lib/cpf_cnpj_plus/validator/cnpj.rb', line 28 def self.valid_structure?(cnpj) cnpj[0..11] =~ /^[A-Z0-9]{12}$/ && cnpj[12..13] =~ /^[0-9]{2}$/ end |