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