| Module | CpfCnpj |
| In: |
brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb
|
| DIVISOR | = | 11 |
| CPF_LENGTH | = | 11 |
| CPF_REGEX | = | /(\d{3}\.?\d{3}\.?\d{3})-?(\d{2})/ |
| CPF_ALGS_1 | = | [10, 9, 8, 7, 6, 5, 4, 3, 2] |
| CPF_ALGS_2 | = | [11, 10, 9, 8, 7, 6, 5, 4, 3, 2] |
| CNPJ_LENGTH | = | 14 |
| CNPJ_REGEX | = | /(\d{2}\.?\d{3}\.?\d{3}\/?\d{4})-?(\d{2})/ |
| CNPJ_ALGS_1 | = | [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] |
| CNPJ_ALGS_2 | = | [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] |
| numero | [R] |
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 4
4: def initialize(numero)
5: @numero = numero
6: @match = self.instance_of?(Cpf) ? @numero =~ CPF_REGEX : @numero =~ CNPJ_REGEX
7: @numero_puro = $1
8: @para_verificacao = $2
9: @numero = (@match ? format_number! : nil)
10: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 16
16: def ==(outro_doc)
17: self.numero == outro_doc.numero
18: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 62
62: def digito_verificador(resto)
63: resto < 2 ? 0 : DIVISOR - resto
64: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 78
78: def format_number!
79: if self.instance_of? Cpf
80: @numero =~ /(\d{3})\.?(\d{3})\.?(\d{3})-?(\d{2})/
81: @numero = "#{$1}.#{$2}.#{$3}-#{$4}"
82: else
83: @numero =~ /(\d{2})\.?(\d{3})\.?(\d{3})\/?(\d{4})-?(\d{2})/
84: @numero = "#{$1}.#{$2}.#{$3}/#{$4}-#{$5}"
85: end
86: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 56
56: def multiplica_e_soma(algs, numero_str)
57: multiplicados = []
58: numero_str.scan(/\d{1}/).each_with_index { |e, i| multiplicados[i] = e.to_i * algs[i] }
59: multiplicados.inject { |s,e| s + e }
60: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 66
66: def primeiro_digito_verificador
67: array = self.instance_of?(Cpf) ? CPF_ALGS_1 : CNPJ_ALGS_1
68: soma = multiplica_e_soma(array, @numero_puro)
69: digito_verificador(soma%DIVISOR).to_s
70: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 72
72: def segundo_digito_verificador(primeiro_verificador)
73: array = self.instance_of?(Cpf) ? CPF_ALGS_2 : CNPJ_ALGS_2
74: soma = multiplica_e_soma(array, @numero_puro + primeiro_verificador)
75: digito_verificador(soma%DIVISOR).to_s
76: end
# File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 42
42: def verifica_numero
43: limpo = @numero.gsub(/[\.\/-]/, "")
44: if self.instance_of? Cpf
45: return false if limpo.length != 11
46: elsif self.instance_of? Cnpj
47: return false if limpo.length != 14
48: end
49: return false if limpo.scan(/\d/).sort.join == limpo
50: primeiro_verificador = primeiro_digito_verificador
51: segundo_verificador = segundo_digito_verificador(primeiro_verificador)
52: verif = primeiro_verificador + segundo_verificador
53: verif == @para_verificacao
54: end