Título de eleitor

O número de inscrição eleitoral (título de eleitor).

  • Matriz de paridade

Validar

Valida um título de eleitor: um número sequencial de 8 dígitos, um código de UF de 2 dígitos (01 a 28) e 2 dígitos verificadores por módulo 11, com no máximo 12 dígitos (Resolução TSE nº 23.659/2021, art. 36).

  • Um valor de 13 dígitos é rejeitado. A 2.4.0 aceitava uma forma de 13 dígitos de SP/MG com número sequencial de 9 dígitos.
  • O TSE omite os zeros à esquerda do número sequencial na emissão. Um valor mais curto é completado com zeros à esquerda até 12 dígitos antes da validação: 123450159 é validado como 000123450159. É preciso ao menos um dígito sequencial, então o menor valor aceito tem 5 dígitos. A 2.4.0 rejeitava esses valores mais curtos.
  • Nenhuma fonte oficial dá os pesos dos dígitos verificadores nem a regra de SP/MG que transforma resto 0 em 1. Eles seguem referências da comunidade.
  • Caracteres de máscara: espaço em branco, ., - e /, sozinhos ou em sequência, em volta e entre os grupos 0000 0000 00 00 (os mesmos que cpf.isValid lê). Qualquer outro caractere, em particular uma letra, torna o valor inválido. Um separador dentro de um grupo é rejeitado, exceto entre os dígitos de um número sequencial escrito sem os zeros à esquerda, agrupado da direita (123 4567 01 91).
  • Só uma string é lida. Qualquer outro tipo retorna false.

Decisão pendente

A referência (JS) aceita espaços, pontos, hífens e barras em volta e entre os grupos, com o número sequencial encurtado agrupado da direita (123 4567 01 91). Até a 2.4.0 aceitava só espaços e pontos. Outras bibliotecas aceitam só dígitos. Veja a decisão em aberto em docs/findings.md (em inglês).

ParâmetroTipoObrigatório
valuestringsim
retornaboolean

Valida um título de eleitor. Um título tem no máximo 12 dígitos, então um valor de 13 dígitos é rejeitado.

  • Um título é um número sequencial de 8 dígitos, um código de unidade federativa de 2 dígitos (01 a 28) e 2 dígitos verificadores.
  • O TSE despreza os zeros à esquerda do número sequencial na emissão, então um valor mais curto é lido como o título sem eles e completado com zeros à esquerda até 12 dígitos antes da validação (123450159 é validado como 000123450159). É preciso ao menos um dígito sequencial: o menor valor aceito tem 5 dígitos.
  • Espaços, pontos, hífens e barras são aceitos ao redor e entre os grupos. Qualquer outro caractere invalida o valor.
  • A Resolução TSE nº 23.659/2021, art. 36, que revogou a Resolução TSE nº 21.538/2003 (art. 140), fixa o layout, a tabela das unidades federativas e dois dígitos verificadores "determinados com base no 'Módulo 11'". Ela não traz pesos nem regra por estado: os pesos e a regra que troca o resto 0 por 1 para São Paulo (01) e Minas Gerais (02) não têm fonte oficial e seguem as referências da comunidade abaixo.
import { generateVoterId, isValidVoterId } from '@brazilian-utils/brazilian-utils';

const voterId = generateVoterId('SP');

isValidVoterId(voterId); // true
isValidVoterId('102385010671'); // true (12 dígitos)
isValidVoterId('123450159'); // true (000123450159 emitido sem os zeros à esquerda)
isValidVoterId('1234567880191'); // false (13 dígitos, mais que os 12 que o TSE permite)
isValidVoterId('123456780124'); // false (dígitos verificadores inválidos)

Fonte: Resolução TSE nº 23.659/2021, art. 36 ("composto por até 12 algarismos", "os oito primeiros algarismos serão sequenciados, desprezando-se, na emissão, os zeros à esquerda"), brutils e siga0984.

Código: brazilian-utils/javascript
Teste com JavaScript isValidVoterId
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (52) e o resultado em cada biblioteca voterId.isValid

Formatar

Formata um título de eleitor com o agrupamento 0000 0000 00 00.

  • Um título tem no máximo 12 dígitos (Resolução TSE nº 23.659/2021, art. 36), então a função descarta os dígitos depois do 12º e não tem agrupamento de 13 dígitos. A 2.4.0 agrupava um valor de 13 dígitos de SP/MG como 0000 0000 0 00 00.
  • O TSE omite os zeros à esquerda do número sequencial na emissão. Por padrão, um valor mais curto é formatado a partir da esquerda, como um valor parcial. options.pad primeiro completa o valor com zeros à esquerda até 12 dígitos: 123450159 dá 0001 2345 01 59.
  • options.obfuscate (padrão false) oculta com * os 3 primeiros dígitos e os 2 dígitos verificadores: ***4 5678 01 **. O código da UF continua visível.
  • Nenhuma autoridade publica uma regra de mascaramento para o título de eleitor. A regra é uma analogia com a que as Leis de Diretrizes Orçamentárias fixam para publicar um CPF ("ocultar os três primeiros dígitos e os dois dígitos verificadores", Lei nº 12.309/2010, art. 87, § 5º, repetida até a LDO 2026, Lei nº 15.321/2025, art. 163), não uma norma publicada.
  • A máscara oculta por posição. Um título passado como número perdeu os zeros à esquerda, então passe pad junto com obfuscate nesse caso.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número).
  • Um valor sem dígitos (vazio, ou só letras e símbolos) retorna uma string vazia, mesmo com pad.
  • options.obfuscate é aplicado depois de pad, e é lido como verdadeiro ou falso, como pad: um não booleano como 1 também oculta os dígitos, e 0 não oculta. Os dois podem ser combinados (123450159 dá ***1 2345 01 **).

Decisão pendente

A referência (JS) formata só os caracteres que um valor incompleto tem e retorna uma string vazia para entrada vazia ou inválida. Outras bibliotecas retornam null. Veja a decisão em aberto em docs/findings.md (em inglês).

ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatVoterIdOptionsnão
options.padbooleannão
options.obfuscatebooleannão
retornastring

Formata um título de eleitor com o agrupamento de 12 dígitos 0000 0000 00 00.

  • Opções (FormatVoterIdOptions): pad completa o valor com zeros à esquerda até 12 dígitos, restaurando os zeros de um título emitido sem eles; obfuscate esconde os 3 primeiros dígitos e os 2 dígitos verificadores, deixando visível o código da unidade federativa. A máscara esconde por posição, então use pad junto com obfuscate para um título passado como número, que perdeu os zeros à esquerda: sem ele a máscara cai sobre os dígitos verificadores. Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • Sem pad, um valor mais curto é formatado a partir da esquerda, como um título digitado pela metade.
  • Os dígitos além do 12º são descartados.
  • Nenhuma autoridade publica uma regra de mascaramento para o título de eleitor, então o obfuscate usa a que as Leis de Diretrizes Orçamentárias definem para a divulgação do CPF ("ocultar os três primeiros dígitos e os dois dígitos verificadores", Lei nº 14.194/2021, art. 149, regra criada pela Lei nº 12.309/2010, art. 87, § 5º), um número com a mesma estrutura.
import { formatVoterId } from '@brazilian-utils/brazilian-utils';

formatVoterId('123456780175'); // '1234 5678 01 75'
formatVoterId('123456780175', { obfuscate: true }); // '***4 5678 01 **'
formatVoterId('123450159', { pad: true }); // '0001 2345 01 59'
formatVoterId('123450159'); // '1234 5015 9' (lido como um título digitado pela metade)
Código: brazilian-utils/javascript
Teste com JavaScript formatVoterId
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (45) e o resultado em cada biblioteca voterId.format

Interpretar

Remove a formatação do título de eleitor e mantém apenas os dígitos, com no máximo 12 dígitos para toda UF.

  • Um título tem no máximo 12 dígitos (Resolução TSE nº 23.659/2021, art. 36). A 2.4.0 mantinha 13 dígitos quando os dígitos da UF eram de SP ou MG.
  • Um valor mais curto é retornado como está, sem zeros à esquerda. voterId.isValid aceita essa forma, e voterId.format com pad restaura os zeros.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número).
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do título de eleitor, mantém apenas os dígitos e limita o resultado a 12 dígitos. Um valor mais curto é mantido como está, sem acrescentar zeros à esquerda.

import { parseVoterId } from '@brazilian-utils/brazilian-utils';

parseVoterId('1234 5678 01 75'); // '123456780175'
parseVoterId('12345 01 59'); // '123450159'
Código: brazilian-utils/javascript
Teste com JavaScript parseVoterId
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (13) e o resultado em cada biblioteca voterId.parse

Gerar

Gera um título de eleitor aleatório e válido: 12 dígitos, sem máscara, com os zeros à esquerda do número sequencial mantidos.

  • state (um código de estado, ou ZZ para um título emitido no exterior) define o código da UF. Maiúsculas, minúsculas e espaços nas pontas são ignorados (" sp " é SP); a 2.4.0 lia um código em minúsculas como desconhecido. Com um valor desconhecido, a função usa ZZ (UF 28).
  • O resultado sempre tem 12 dígitos. O mesmo título sem os zeros à esquerda do número sequencial também é válido (voterId.isValid o lê).
  • Um valor que não é string também usa ZZ; a função nunca lança exceção por causa de state.
ParâmetroTipoObrigatório
stateStateCode | "ZZ"não
retornastring

Gera um título de eleitor válido aleatório. O argumento opcional state (StateCode, ou "ZZ" para um título expedido no exterior) define o código de unidade federativa.

  • state ignora maiúsculas/minúsculas e espaços nas pontas ('sp' é 'SP'). Uma UF desconhecida, ou um valor que não seja string, usa "ZZ" (UF 28).
  • O resultado sempre tem 12 dígitos, com os zeros à esquerda do número sequencial; o mesmo título sem eles também é válido.
import { generateVoterId } from '@brazilian-utils/brazilian-utils';

generateVoterId(); // título de eleitor aleatório válido (exterior, "ZZ")
generateVoterId('SP'); // título de eleitor aleatório válido de São Paulo
generateVoterId('XX'); // usa "ZZ" em vez de lançar erro

Fonte: Lei nº 14.194/2021, art. 149, a regra de mascaramento do CPF que o obfuscate toma emprestada, criada pela Lei nº 12.309/2010, art. 87, § 5º e repetida pelas LDOs seguintes (a de 2026, Lei nº 15.321/2025, art. 163, a repete).

Código: brazilian-utils/javascript
Teste com JavaScript generateVoterId
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (1) e o resultado em cada biblioteca voterId.generate

Decodificar

Lê os campos de um título de eleitor: o número sequencial, a unidade da federação da inscrição e os dígitos verificadores.

  • Retorna null exatamente quando voterId.isValid retorna false; as regras de entrada são as mesmas.
  • O resultado tem sequentialNumber (8 dígitos), federativeUnion (o código de 01 a 28), stateCode (a sigla do estado, ou null para 28, os eleitores no exterior) e checkDigits (2 dígitos). Os códigos são strings e mantêm os zeros à esquerda.
  • Um título emitido sem os zeros à esquerda do número sequencial é lido como voterId.isValid o lê, completado com zeros à esquerda até 12 dígitos: 123450159 dá o sequentialNumber 00012345.
  • stateCode é a unidade da federação da inscrição, não necessariamente onde o eleitor mora hoje.
  • Cada chamada retorna um objeto novo.
ParâmetroTipoObrigatório
valuestringsim
retornaVoterIdInfo | null

Lê os campos de um título de eleitor, como um VoterIdInfo, ou null quando o isValidVoterId retornaria false.

  • Campos: sequentialNumber (8 dígitos), federativeUnion (o código '01' a '28'), stateCode (um StateCode, ou null para '28', os eleitores no exterior) e checkDigits (2 dígitos). Os códigos são strings que mantêm os zeros à esquerda.
  • Um título expedido sem os zeros à esquerda do número sequencial é lido como o isValidVoterId o lê, preenchido com zeros à esquerda até 12 dígitos: '123450159' dá o sequentialNumber '00012345'.
  • O stateCode é a unidade federativa da inscrição, não necessariamente onde o eleitor mora hoje.
import { getVoterIdInfo } from '@brazilian-utils/brazilian-utils';

getVoterIdInfo('1023 8501 06 71');
// {
//   sequentialNumber: '10238501',
//   federativeUnion: '06',
//   stateCode: 'PR',
//   checkDigits: '71',
// }

getVoterIdInfo('000000002801'); // { sequentialNumber: '00000000', federativeUnion: '28', stateCode: null, checkDigits: '01' }
getVoterIdInfo('123456780124'); // null (dígitos verificadores inválidos)

Fonte: Resolução TSE nº 23.659/2021, art. 36.

Código: brazilian-utils/javascript
Teste com JavaScript getVoterIdInfo
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (26) e o resultado em cada biblioteca voterId.getInfo

Fontes oficiais

Atualizado em

Nesta página