class TituloEleitoral::NumeroInscricao

Attributes

dv1[R]
dv2[R]
numero[R]
numero_original[R]

Public Class Methods

new(numero) click to toggle source

www.tse.jus.br/legislacao/codigo-eleitoral/normas-editadas-pelo-tse/resolucao-nb0-21.538-de-14-de-outubro-de-2003-brasilia-2013-df www.exceldoseujeito.com.br/2008/12/19/validar-cpf-cnpj-e-titulo-de-eleitor-parte-ii/ cdn.tse.jus.br/saae/util/scriptsGerais.js ef3cinco.com/2011/09/07/como-validar-titulo-de-eleitor-usando-java-netbeans/

# File lib/titulo_eleitoral/numero_inscricao.rb, line 12
def initialize(numero)
  @numero_original = divide_em_array(numero)
  @numero = normaliza_quantidade_digitos(numero_original)
  @dv1 = primeiro_digito_verificador
  @dv2 = segundo_digito_verificador
end

Public Instance Methods

codigo_uf() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 24
def codigo_uf
  digitos_uf if uf_valida?
end
sigla_uf() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 28
def sigla_uf
  UFS[digitos_uf] if uf_valida?
end
valido?() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 19
def valido?
  return false if (numero.size > NUMERO_DIGITOS) || (codigo_uf.nil?)
  digitos_verificadores == digitos_verificadores_calculados
end

Private Instance Methods

calcula_digito_verificador(digitos, multiplicadores) click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 45
def calcula_digito_verificador(digitos, multiplicadores)
  soma_multiplicacao = digitos.zip(multiplicadores).inject(0) { |resultado,(digito, multiplicador)| resultado + (digito * multiplicador) }
  resto_divisao = soma_multiplicacao % MODULO
  verifica_resto(resto_divisao)
end
digitos_uf() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 66
def digitos_uf
  numero[8,2].join
end
digitos_verificadores() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 70
def digitos_verificadores
  numero[10,2].join
end
digitos_verificadores_calculados() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 79
def digitos_verificadores_calculados
  dv1.to_s + dv2.to_s
end
divide_em_array(numero) click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 51
def divide_em_array(numero)
  case
    when numero.is_a?(String) && !numero.empty?
      somente_numeros(numero).split('')
    when numero.is_a?(Fixnum)
      numero.to_s.split('')
    else
      []
  end
end
normaliza_quantidade_digitos(numero) click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 62
def normaliza_quantidade_digitos(numero)
  (numero.join.size >= NUMERO_DIGITOS) ? numero : numero.join.rjust(NUMERO_DIGITOS, "0").split('')
end
primeiro_digito_verificador() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 33
def primeiro_digito_verificador
  #Somar a multiplicação dos 8 primeiros digitos, respectivamente, por [2,3,4,5,6,7,8,9] e após calcular módulo 11 desta soma
  digitos = numero.take(8).map(&:to_i)
  calcula_digito_verificador(digitos, MULTIPLICADORES_DV1)
end
segundo_digito_verificador() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 39
def segundo_digito_verificador
  #Somar a multiplicação dos digitos 9, 10 e DV1, respectivamente, por [7,8,9] e após calcular módulo 11 desta soma
  digitos = numero[8,2].map(&:to_i) << dv1
  calcula_digito_verificador(digitos, MULTIPLICADORES_DV2)
end
somente_numeros(valor) click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 95
def somente_numeros(valor)
  valor.gsub(/\D/, '')
end
uf_valida?() click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 74
def uf_valida?
  uf = digitos_uf.to_i
  uf >= 1 && uf <=28
end
verifica_resto(resto_divisao) click to toggle source
# File lib/titulo_eleitoral/numero_inscricao.rb, line 83
def verifica_resto(resto_divisao)
  if resto_divisao == 10
    0
  else
    if (resto_divisao == 0) && ((sigla_uf == 'SP') || (sigla_uf == 'MG'))
      1
    else
      resto_divisao
    end
  end
end