module ActAsCnpjCpf::Base
Attributes
numero[R]
Public Class Methods
new(numero)
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 5 def initialize(numero) @numero = numero.to_s.gsub(/[^0-9]/, '') @match = @numero =~ self.class::REGEX @puro = $1 @digito = $2 @numero = valido? ? $1+$2 : numero end
Public Instance Methods
==(other)
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 22 def == other other.respond_to?(:numero) ? self.numero == other.numero : self.numero == other end
to_s()
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 13 def to_s @numero end
valido?()
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 17 def valido? return false unless @match verifica_numero end
Private Instance Methods
dv(resto)
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 41 def dv(resto) resto < 2 ? 0 : 11 - resto end
multiplica_e_soma(algs, numeros)
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 35 def multiplica_e_soma(algs, numeros) results = [] numeros.scan(/\d{1}/).each_with_index { |e, i| results[i] = e.to_i * algs[i] } results.inject { |s,e| s + e } end
primeiro_dv()
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 45 def primeiro_dv @primeiro ||= dv(multiplica_e_soma(self.class::ALGS_1, @puro) % 11).to_s end
segundo_dv(primeiro_verificador)
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 49 def segundo_dv(primeiro_verificador) dv(multiplica_e_soma(self.class::ALGS_2, @puro + primeiro_verificador) % 11).to_s end
verifica_numero()
click to toggle source
# File lib/act_as_cnpj_cpf/base.rb, line 28 def verifica_numero return false if @numero.length != self.class::LENGTH || @numero.scan(/\d/).uniq.length == 1 primeiro_dv + segundo_dv(primeiro_dv) == @digito end