Module CpfCnpj
In: brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb

Methods

Constants

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]

Attributes

numero  [R] 

Public Class methods

[Source]

    # 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

Public Instance methods

[Source]

    # File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 16
16:   def ==(outro_doc)
17:     self.numero == outro_doc.numero
18:   end

[Source]

    # File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 12
12:   def to_s
13:     @numero || ""
14:   end

Verifica se o numero possui o formato correto e se constitui um numero de documento valido, dependendo do seu tipo (Cpf ou Cnpj).

[Source]

    # File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 23
23:   def valido?   
24:     return false unless @match    
25:     verifica_numero
26:   end

Private Instance methods

[Source]

    # File brcpfcnpj/lib/brcpfcnpj/cpf_cnpj.rb, line 62
62:   def digito_verificador(resto)
63:     resto < 2 ? 0 : DIVISOR - resto
64:   end

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]