Documentos

Validação do Título de Eleitor

Entenda o algoritmo de validação do Título de Eleitor brasileiro. Conheça a estrutura dos 12 dígitos, os códigos de UF e o cálculo do Módulo 11 com exceções.

22 de julho de 20266 min de leituraDevThru

O Título de Eleitor é o documento emitido pela Justiça Eleitoral (TSE) que atesta o alistamento eleitoral de cidadãos brasileiros. Em aplicações de onboarding, sistemas de Recursos Humanos, plataformas de fintechs e portais governamentais, a verificação desse número é crucial para mitigar fraudes cadastrais e garantir a integridade dos dados.

Assim como o CPF e o CNPJ, o Título de Eleitor utiliza um algoritmo baseado em Módulo 11 para gerar seus dígitos verificadores. No entanto, ele possui peculiaridades únicas: uma estrutura que codifica o estado de emissão do documento e regras de exceção históricas para os estados de São Paulo e Minas Gerais.

Neste artigo, vamos detalhar a anatomia do Título de Eleitor, a tabela de códigos de UF do TSE e como implementar uma validação matemática completa em código.

Estrutura dos 12 Dígitos do Título de Eleitor

O Título de Eleitor é formado por exatamente 12 dígitos numéricos (no formato AAAA AAAA UF D1D2), organizados sequencialmente da seguinte forma:

Posição Descrição Função
1 a 8 Número Sequencial Identificador único do eleitor gerado pelo cartório eleitoral.
9 e 10 Código da UF Identifica o estado (Unidade da Federação) onde o título foi emitido.
11 1º Dígito Verificador (D1) Calculado sobre o número sequencial (dígitos 1 a 8).
12 2º Dígito Verificador (D2) Calculado sobre o código da UF e o primeiro dígito verificador (dígitos 9, 10 e 11).
💡 Importante: Títulos emitidos no Exterior (ZZ) utilizam o código de UF 28. O número total sempre possui 12 dígitos; caso um título antigo possua menos dígitos visíveis no cartão impresso, ele deve ser preenchido com zeros à esquerda até completar os 12 dígitos.

Tabela de Códigos da UF (Justiça Eleitoral)

Os dígitos 9 e 10 indicam o estado de emissão conforme a tabela oficial do Tribunal Superior Eleitoral (TSE):

Código UF / Região Código UF / Região
01São Paulo (SP)15Pará (PA)
02Minas Gerais (MG)16Maranhão (MA)
03Rio de Janeiro (RJ)17Ceará (CE)
04Rio Grande do Sul (RS)18Piauí (PI)
05Bahia (BA)19Rio Grande do Norte (RN)
06Paraná (PR)20Paraíba (PB)
07Ceará (CE - Antigo) / DF21Pernambuco (PE)
08Pernambuco (PE - Antigo) / AL22Alagoas (AL)
09Goiás (GO) / TO23Sergipe (SE)
10Mato Grosso (MT) / MS24Amapá (AP)
11Amazonas (AM) / RR / AP / AC25Roraima (RR)
12Rondônia (RO)26Tocantins (TO)
13Santa Catarina (SC)27Distrito Federal (DF)
14Paraíba (PB - Antigo) / AM28Exterior (ZZ)

O Algoritmo de Validação dos Dígitos Verificadores

Passo 1: Cálculo do Primeiro Dígito Verificador (D1)

  1. Pegue os primeiros 8 dígitos do título.
  2. Multiplique cada um pelos pesos posicionais da esquerda para a direita: 2, 3, 4, 5, 6, 7, 8, 9.
  3. Somar os resultados das 8 multiplicações.
  4. Calcular o resto da divisão da soma por 11 (resto = soma % 11).
  5. Regra do Dígito D1:
    • Se resto === 10: D1 = 0.
    • Se resto === 0:
      • Se o código de UF for 01 (SP) ou 02 (MG): D1 = 1.
      • Para qualquer outro estado: D1 = 0.
    • Caso contrário: D1 = resto.

Passo 2: Cálculo do Segundo Dígito Verificador (D2)

  1. Pegue os dígitos 9 e 10 (código da UF) e o dígito 11 (o D1 recém-calculado).
  2. Multiplique cada um pelos pesos: 7, 8, 9 (ex: dígito9 * 7 + dígito10 * 8 + D1 * 9).
  3. Somar os 3 resultados das multiplicações.
  4. Calcular o resto da divisão da soma por 11 (resto = soma % 11).
  5. Regra do Dígito D2:
    • Se resto === 10: D2 = 0.
    • Se resto === 0:
      • Se o código de UF for 01 (SP) ou 02 (MG): D2 = 1.
      • Para qualquer outro estado: D2 = 0.
    • Caso contrário: D2 = resto.

Implementação Completa em TypeScript / JavaScript

Abaixo está o código pronto e resiliente para integrar em serviços backend ou no frontend de suas aplicações web:

/**
 * Valida se uma string é um Título de Eleitor brasileiro válido.
 * @param {string} tituloStr - O número do título de eleitor (com ou sem pontuação).
 * @returns {boolean} True se for um título válido, False caso contrário.
 */
function validarTituloEleitor(tituloStr) {
  // Remove caracteres não numéricos
  const cleaned = tituloStr.replace(/\D/g, "");

  // Preenche com zeros à esquerda se necessário para completar 12 dígitos
  const titulo = cleaned.padStart(12, "0");

  if (titulo.length !== 12) return false;

  // Rejeita números com todos os dígitos iguais (ex: 000000000000)
  if (/^(\d)\1{11}$/.test(titulo)) return false;

  const ufCode = parseInt(titulo.substring(8, 10), 10);
  // Os códigos de UF válidos vão de 01 a 28
  if (ufCode < 1 || ufCode > 28) return false;

  // 1º Dígito Verificador (D1)
  const pesosD1 = [2, 3, 4, 5, 6, 7, 8, 9];
  let somaD1 = 0;
  for (let i = 0; i < 8; i++) {
    somaD1 += parseInt(titulo.charAt(i), 10) * pesosD1[i];
  }

  let restoD1 = somaD1 % 11;
  let d1;
  if (restoD1 === 10) {
    d1 = 0;
  } else if (restoD1 === 0) {
    d1 = (ufCode === 1 || ufCode === 2) ? 1 : 0;
  } else {
    d1 = restoD1;
  }

  // Compara D1 calculado com o D1 informado no documento
  if (d1 !== parseInt(titulo.charAt(10), 10)) return false;

  // 2º Dígito Verificador (D2)
  const pesosD2 = [7, 8, 9];
  let somaD2 =
    parseInt(titulo.charAt(8), 10) * pesosD2[0] +
    parseInt(titulo.charAt(9), 10) * pesosD2[1] +
    d1 * pesosD2[2];

  let restoD2 = somaD2 % 11;
  let d2;
  if (restoD2 === 10) {
    d2 = 0;
  } else if (restoD2 === 0) {
    d2 = (ufCode === 1 || ufCode === 2) ? 1 : 0;
  } else {
    d2 = restoD2;
  }

  // Compara D2 calculado com o D2 informado no documento
  return d2 === parseInt(titulo.charAt(11), 10);
}

// Exemplo de Uso:
console.log(validarTituloEleitor("123456780190")); // Teste de validação

Perguntas Frequentes (FAQ)

Por que os estados de SP (01) e MG (02) têm regras especiais no resto 0?

Trata-se de uma convenção histórica da Justiça Eleitoral brasileira mantida nos sistemas computacionais do TSE para evitar duplicidade ou inconsistências na transição de cadastros manuais legados dos dois maiores colégios eleitorais do país.

Um Título de Eleitor gerado sinteticamente serve como documento real?

Não. A validação do número atesta apenas a conformidade matemática da chave e a validade do código da UF. Ele atesta a estrutura lógica, mas a existência de um eleitor ativo cadastrado requer consulta aos webservices oficiais do TSE.

Conclusão

Entender a matemática do Título de Eleitor permite criar rotinas de validação eficientes em formulários de cadastro, garantindo a captura correta dos dados antes de submetê-los a APIs externas.

Precisa gerar números válidos para testes de software ou validar documentos em staging? Utilize a nossa ferramenta gratuita [Gerador e Validador de Título de Eleitor](/tools/documents/titulo-eleitor)!

🛠️ Experimente na prática

Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.

Título de Eleitorvalidaçãoalgoritmodocumentos brasileirosMódulo 11TSE

Esse artigo foi útil para você?