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). |
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 |
|---|---|---|---|
01 | São Paulo (SP) | 15 | Pará (PA) |
02 | Minas Gerais (MG) | 16 | Maranhão (MA) |
03 | Rio de Janeiro (RJ) | 17 | Ceará (CE) |
04 | Rio Grande do Sul (RS) | 18 | Piauí (PI) |
05 | Bahia (BA) | 19 | Rio Grande do Norte (RN) |
06 | Paraná (PR) | 20 | Paraíba (PB) |
07 | Ceará (CE - Antigo) / DF | 21 | Pernambuco (PE) |
08 | Pernambuco (PE - Antigo) / AL | 22 | Alagoas (AL) |
09 | Goiás (GO) / TO | 23 | Sergipe (SE) |
10 | Mato Grosso (MT) / MS | 24 | Amapá (AP) |
11 | Amazonas (AM) / RR / AP / AC | 25 | Roraima (RR) |
12 | Rondônia (RO) | 26 | Tocantins (TO) |
13 | Santa Catarina (SC) | 27 | Distrito Federal (DF) |
14 | Paraíba (PB - Antigo) / AM | 28 | Exterior (ZZ) |
O Algoritmo de Validação dos Dígitos Verificadores
Passo 1: Cálculo do Primeiro Dígito Verificador (D1)
- Pegue os primeiros 8 dígitos do título.
- Multiplique cada um pelos pesos posicionais da esquerda para a direita:
2, 3, 4, 5, 6, 7, 8, 9. - Somar os resultados das 8 multiplicações.
- Calcular o resto da divisão da soma por 11 (
resto = soma % 11). - Regra do Dígito D1:
- Se
resto === 10: D1 = 0. - Se
resto === 0:- Se o código de UF for
01(SP) ou02(MG): D1 = 1. - Para qualquer outro estado: D1 = 0.
- Se o código de UF for
- Caso contrário: D1 = resto.
- Se
Passo 2: Cálculo do Segundo Dígito Verificador (D2)
- Pegue os dígitos 9 e 10 (código da UF) e o dígito 11 (o D1 recém-calculado).
- Multiplique cada um pelos pesos:
7, 8, 9(ex:dígito9 * 7 + dígito10 * 8 + D1 * 9). - Somar os 3 resultados das multiplicações.
- Calcular o resto da divisão da soma por 11 (
resto = soma % 11). - Regra do Dígito D2:
- Se
resto === 10: D2 = 0. - Se
resto === 0:- Se o código de UF for
01(SP) ou02(MG): D2 = 1. - Para qualquer outro estado: D2 = 0.
- Se o código de UF for
- Caso contrário: D2 = resto.
- Se
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.
