Título de eleitor
O número de inscrição eleitoral (título de eleitor).
Validar
- JavaScript, biblioteca
- Python, biblioteca18 casos falham
- Go, biblioteca18 casos falham
- Ruby, biblioteca18 casos falham
- Rust, biblioteca18 casos falham
- .NET, biblioteca18 casos falham
- Erlang, biblioteca18 casos falham
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 como000123450159. É 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 grupos0000 0000 00 00(os mesmos quecpf.isValidlê). 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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | boolean |
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 (
01a28) 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 como000123450159). É 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/javascriptTeste com JavaScript isValidVoterId
Casos de teste compartilhados (52) e o resultado em cada biblioteca voterId.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca24 casos falham
- Go, biblioteca20 casos falham
- Ruby, biblioteca26 casos falham
- Rust, biblioteca21 casos falham
- .NET, biblioteca23 casos falham
- Erlang, biblioteca26 casos falham
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.padprimeiro completa o valor com zeros à esquerda até 12 dígitos:123450159dá0001 2345 01 59. options.obfuscate(padrãofalse) 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
padjunto comobfuscatenesse 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 depad, e é lido como verdadeiro ou falso, comopad: um não booleano como1também oculta os dígitos, e0não oculta. Os dois podem ser combinados (123450159dá***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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
options | FormatVoterIdOptions | não |
options.pad | boolean | não |
options.obfuscate | boolean | não |
| retorna | string |
Formata um título de eleitor com o agrupamento de 12 dígitos 0000 0000 00 00.
- Opções (
FormatVoterIdOptions):padcompleta o valor com zeros à esquerda até 12 dígitos, restaurando os zeros de um título emitido sem eles;obfuscateesconde 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 usepadjunto comobfuscatepara 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 compad. - 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
obfuscateusa 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)Teste com JavaScript formatVoterId
Casos de teste compartilhados (45) e o resultado em cada biblioteca voterId.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca3 casos falham
- Ruby, biblioteca4 casos falham
- Rust, biblioteca3 casos falham
- .NET, biblioteca3 casos falham
- Erlang, biblioteca
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.isValidaceita essa forma, evoterId.formatcompadrestaura 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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
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'Teste com JavaScript parseVoterId
Casos de teste compartilhados (13) e o resultado em cada biblioteca voterId.parse
Gerar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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, ouZZpara 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 usaZZ(UF28).- O resultado sempre tem 12 dígitos. O mesmo título sem os zeros à esquerda do número sequencial também é válido (
voterId.isValido lê). - Um valor que não é string também usa
ZZ; a função nunca lança exceção por causa destate.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
state | StateCode | "ZZ" | não |
| retorna | string |
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.
stateignora maiúsculas/minúsculas e espaços nas pontas ('sp'é'SP'). Uma UF desconhecida, ou um valor que não seja string, usa"ZZ"(UF28).- 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 erroFonte: 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).
Teste com JavaScript generateVoterId
Casos de teste compartilhados (1) e o resultado em cada biblioteca voterId.generate
Decodificar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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
nullexatamente quandovoterId.isValidretornafalse; as regras de entrada são as mesmas. - O resultado tem
sequentialNumber(8 dígitos),federativeUnion(o código de01a28),stateCode(a sigla do estado, ounullpara28, os eleitores no exterior) echeckDigits(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.isValido lê, completado com zeros à esquerda até 12 dígitos:123450159dá osequentialNumber00012345. stateCodeé a unidade da federação da inscrição, não necessariamente onde o eleitor mora hoje.- Cada chamada retorna um objeto novo.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | VoterIdInfo | 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(umStateCode, ounullpara'28', os eleitores no exterior) echeckDigits(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
isValidVoterIdo lê, preenchido com zeros à esquerda até 12 dígitos:'123450159'dá osequentialNumber'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/javascriptTeste com JavaScript getVoterIdInfo
Casos de teste compartilhados (26) e o resultado em cada biblioteca voterId.getInfo
Fontes oficiais
Atualizado em
