CPF
Cadastro de Pessoas Físicas, o número de 11 dígitos do contribuinte pessoa física, terminado em dois dígitos verificadores por módulo 11.
Validar
- JavaScript, biblioteca
- Python, biblioteca5 casos falham
- Go, biblioteca3 casos falham
- Ruby, biblioteca5 casos falham
- Rust, biblioteca5 casos falham
- .NET, biblioteca3 casos falham
- Erlang, biblioteca5 casos falham
Valida um CPF: 9 dígitos de base e 2 dígitos verificadores por módulo 11 (REGRA_VALIDA_CPF da Receita Federal).
- Rejeita um número reservado (os 11 dígitos iguais, por exemplo
00000000000). - Um valor que não tem exatamente 11 dígitos, ou com dígitos verificadores errados, é inválido.
- Entrada vazia, em branco ou não numérica é inválida.
- Fontes: a norma do CPF, IN RFB nº 2.172/2024, não define os dígitos verificadores. A regra e o exemplo
280.012.389-38vêm do Manual de Preenchimento da e-Financeira da Receita Federal (REGRA_VALIDA_CPF). Os números reservados vêm do leiaute DJE da Receita Federal, que lista como inválidos os 10 números com todos os dígitos iguais (000.000.000-00a999.999.999-99).
Decisão pendente
A referência (JS) ignora os caracteres de formatação (., -) e os espaços em branco antes, depois e entre os grupos. Outras bibliotecas aceitam apenas dígitos. Veja a decisão em aberto em docs/findings.md (em inglês).
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
cpf | string | sim |
| retorna | boolean |
Valida um CPF.
- Retorna
falsepara um número reservado (todos os dígitos iguais, como00000000000) e para um dígito verificador errado. - Os números reservados são os que o leiaute DJE da Receita Federal lista como inválidos. A norma do CPF, a IN RFB nº 2.172/2024, não traz regra de dígito verificador; a regra é a do manual da e-Financeira da Receita Federal (Anexo II,
REGRA_VALIDA_CPF, aprovado pelo Ato Declaratório Executivo Cofis nº 10/2026).
import { isValidCpf } from '@brazilian-utils/brazilian-utils';
isValidCpf('155151475'); // false
isValidCpf('111 444 777 35'); // true (máscara com espaços)Teste com JavaScript isValidCpf
Casos de teste compartilhados (37) e o resultado em cada biblioteca cpf.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca28 casos falham
- Go, biblioteca
- Ruby, biblioteca28 casos falham
- Rust, biblioteca13 casos falham
- .NET, biblioteca4 casos falham
- Erlang, biblioteca28 casos falham
Formata um CPF como 000.000.000-00.
options.padprimeiro completa o valor com zeros à esquerda até 11 dígitos.options.obfuscateoculta os 3 primeiros dígitos e os 2 dígitos verificadores com*, depois do preenchimento. É a regra que as Leis de Diretrizes Orçamentárias fixam para publicar um CPF (Lei nº 14.194/2021, art. 149, e Lei nº 15.321/2025, art. 163).- Um número só é lido se for um inteiro seguro não negativo. Um 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 (
-12345678909dava123.456.789-09). - Um valor sem dígitos (vazio, ou só letras e símbolos) retorna uma string vazia mesmo com
options.pad. Até a 2.4.0,padretornava a máscara inteira de zeros (000.000.000-00). - Os dígitos além do 11º são descartados. Um valor que não é string nem número (
null,undefined, um objeto) retorna uma string vazia. - Um número perde os zeros à esquerda; passe uma string, ou use
options.pad, para um CPF que começa com0.
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 | FormatCpfOptions | não |
options.pad | boolean | não |
options.obfuscate | boolean | não |
| retorna | string |
Formata um CPF.
- Opções (
FormatCpfOptions):padpreenche o valor com zeros à esquerda até 11 dígitos antes de aplicar a máscara (padrãofalse);obfuscateesconde os 3 primeiros dígitos e os 2 dígitos verificadores. Um valor vazio, ou sem dígitos, devolve''mesmo compad. obfuscateé aplicada após opad. Segue a regra 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º; a LDO de 2026, Lei nº 15.321/2025, art. 163, a repete).
import { formatCpf } from '@brazilian-utils/brazilian-utils';
formatCpf('74650688000'); // 746.506.880-00
formatCpf('746506880', { pad: true }); // 007.465.068-80
formatCpf('12345678909', { obfuscate: true }); // ***.456.789-**Teste com JavaScript formatCpf
Casos de teste compartilhados (69) e o resultado em cada biblioteca cpf.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca2 casos falham
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Remove a formatação do CPF e mantém apenas os dígitos, com no máximo 11 dígitos.
- Um número só é lido se for um inteiro seguro não negativo. Um 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 que não é string nem número (
null,undefined, um objeto) retorna uma string vazia.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
Remove a formatação do CPF, mantém apenas os dígitos e limita o resultado a 11 dígitos.
import { parseCpf } from '@brazilian-utils/brazilian-utils';
parseCpf('746.506.880-00'); // 74650688000Teste com JavaScript parseCpf
Casos de teste compartilhados (23) e o resultado em cada biblioteca cpf.parse
Gerar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Gera um CPF aleatório e válido: 11 dígitos, sem máscara.
state(um código de estado comoSP) define o 9º dígito, a região fiscal, com a região desse estado (vejacpf.getInfo). O código é lido sem distinção de caixa e sem espaços nas pontas, então"sp"e" SP "sãoSP. A 2.4.0 só lia o código em maiúsculas e sorteava o dígito para"sp".- Sem
state, ou com um código desconhecido, o dígito é aleatório. - Nunca retorna um número com os 11 dígitos iguais.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
state | StateCode | não |
| retorna | string |
Gera um CPF válido aleatório.
- O argumento opcional
state(StateCode, ex."SP") fixa o dígito da região fiscal (o 9º) no código desse estado. stateignora maiúsculas/minúsculas e espaços nas pontas ('sp'é'SP'). Semstate, ou com um código desconhecido, um dígito de região fiscal aleatório é sorteado.
import { generateCpf } from '@brazilian-utils/brazilian-utils';
generateCpf();
generateCpf('SP'); // o 9º dígito é 8, o código da região fiscal de SP
generateCpf('MG'); // o 9º dígito é 6, o código da região fiscal de MGTeste com JavaScript generateCpf
Casos de teste compartilhados (4) e o resultado em cada biblioteca cpf.generate
Decodificar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Lê os campos de um CPF: a base de 8 dígitos, o dígito da região fiscal com os seus estados, e os 2 dígitos verificadores. Aceita a mesma entrada que cpf.isValid e retorna null exatamente quando cpf.isValid é false.
basesão os 8 primeiros dígitos.checkDigitssão os 2 últimos.fiscalRegioné o 9º dígito, como string:1a9para a 1ª a 9ª Região Fiscal da Receita Federal, e0para a 10ª.stateslista os estados dessa região, ordenados pelo nome do estado: 1 DF, GO, MT, MS, TO; 2 AC, AP, AM, PA, RO, RR; 3 CE, MA, PI; 4 AL, PB, PE, RN; 5 BA, SE; 6 MG; 7 ES, RJ; 8 SP; 9 PR, SC; 0 RS.- O dígito indica a região fiscal do endereço informado no primeiro cadastro. Não é o local de nascimento nem de residência.
- Numa região com vários estados, o número não diz qual deles.
- Retorna
nullpara um número reservado como00000000000e para qualquer valor que não é string. - Retorna um objeto novo, com uma lista
statesnova, a cada chamada.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | CpfInfo | null |
Lê os campos que um CPF codifica, como um CpfInfo: a base de 8 dígitos, o dígito fiscalRegion (o 9º dígito, a Região Fiscal da Receita Federal em que o CPF foi inscrito, "1" a "9" e "0" para a 10ª), os states dessa região (StateCode[], ordenados pelo nome do estado) e os 2 checkDigits. Aceita a mesma entrada com ou sem máscara que o isValidCpf e retorna null para tudo que não for um CPF válido. A região é a do endereço informado na primeira inscrição: ela não diz onde o titular nasceu, onde mora hoje nem onde pediu o número, e uma região com mais de um estado não diz qual deles foi.
fiscalRegion | states |
|---|---|
"1" | DF, GO, MT, MS, TO |
"2" | AC, AP, AM, PA, RO, RR |
"3" | CE, MA, PI |
"4" | AL, PB, PE, RN |
"5" | BA, SE |
"6" | MG |
"7" | ES, RJ |
"8" | SP |
"9" | PR, SC |
"0" | RS |
import { getCpfInfo } from '@brazilian-utils/brazilian-utils';
getCpfInfo('123.456.789-09');
// {
// base: '12345678',
// fiscalRegion: '9',
// states: ['PR', 'SC'],
// checkDigits: '09',
// }
getCpfInfo('12345678900'); // null (dígitos verificadores inválidos)Fonte: Receita Federal, "Cadastros: CPF e CNPJ".
Código: brazilian-utils/javascriptTeste com JavaScript getCpfInfo
Casos de teste compartilhados (23) e o resultado em cada biblioteca cpf.getInfo
Guias
- Campo de documentoUm campo que aplica máscara e valida CPF, CNPJ, CEP ou telefone enquanto você digita, com Brazilian Utils em React, Angular, Vue e JavaScript puro.
- Bibliotecas de schemaOs validadores do Brazilian Utils dentro de um schema do Zod, do Valibot ou do ArkType, ou como um Standard Schema próprio.
- Guia de migração: v1 para v2Como migrar um projeto do Brazilian Utils v1.x para a v2: os exports renomeados, os aliases descontinuados que ainda funcionam e um checklist para seguir.
Especificação
Resumo
O CPF é um identificador nacional de 11 dígitos. Os 8 primeiros dígitos são o número de inscrição, escolhido ao acaso. O nono dígito indica a Região Fiscal responsável pela inscrição. Os 2 últimos dígitos são dígitos verificadores. Desde janeiro de 2023, o Brasil usa o CPF como número único de identificação.
Regras de validação
- A entrada deve conter exatamente 11 caracteres.
- Os dígitos verificadores vêm do algoritmo padrão (mod 11).
- Sequências com todos os dígitos iguais (por exemplo,
00000000000) são inválidas.
Algoritmo
- Rejeitar a entrada se o tamanho != 11 ou se for uma sequência repetida.
- Calcular o primeiro dígito verificador (DV1):
- Multiplicar os 9 primeiros dígitos pelos pesos 10..2.
- Somar os resultados.
- DV1 = (soma % 11 < 2 ? 0 : 11 - (soma % 11))
- Calcular o segundo dígito verificador (DV2):
- Multiplicar os 10 primeiros dígitos (incluindo DV1) pelos pesos 11..2.
- Somar os resultados.
- DV2 = (soma % 11 < 2 ? 0 : 11 - (soma % 11))
- Comparar DV1 e DV2 com os 2 últimos dígitos.
Fontes das regras
- A norma do CPF, IN RFB nº 2.172/2024, não define os dígitos verificadores.
- A regra do dígito verificador (REGRA_VALIDA_CPF) e o exemplo
280.012.389-38vêm do Manual de Preenchimento da e-Financeira da Receita Federal, aprovado pelo Ato Declaratório Executivo Cofis nº 10/2026. - Os números reservados (os 11 dígitos iguais, de
000.000.000-00a999.999.999-99) vêm do leiaute DJE da Receita Federal, que os lista como inválidos. - A forma oculta do
formatCpf(***.456.789-**) segue a regra que as Leis de Diretrizes Orçamentárias fixam para publicar um CPF: Lei nº 14.194/2021, art. 149, repetida pela Lei nº 15.321/2025 (LDO 2026), art. 163.
Região fiscal (9º dígito)
O 9º dígito é a Região Fiscal da Receita Federal do endereço informado no primeiro cadastro do CPF. 1 a 9 são a 1ª a 9ª regiões, e 0 é a 10ª.
| Dígito | Estados |
|---|---|
| 1 | DF, GO, MT, MS, TO |
| 2 | AC, AP, AM, PA, RO, RR |
| 3 | CE, MA, PI |
| 4 | AL, PB, PE, RN |
| 5 | BA, SE |
| 6 | MG |
| 7 | ES, RJ |
| 8 | SP |
| 9 | PR, SC |
| 0 | RS |
- O dígito não é o local de nascimento nem de residência. É a região do endereço no primeiro cadastro.
- Numa região com vários estados, o número não diz qual deles.
getCpfInforetorna{ base, fiscalRegion, states, checkDigits }: os 8 primeiros dígitos, o 9º dígito como string, os estados da região ordenados pelo nome, e os 2 dígitos verificadores. Retornanullexatamente quandoisValidCpféfalse.generateCpf(state)escreve o dígito da região destate. O código do estado é lido sem distinção de caixa e sem espaços nas pontas ("sp"éSP). A 2.4.0 só lia o código em maiúsculas.
Exemplo: getCpfInfo("123.456.789-09") retorna { base: "12345678", fiscalRegion: "9", states: ["PR", "SC"], checkDigits: "09" }.
Números como entrada
formatCpf e parseCpf também recebem número. Ele 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.
Regex
- CPF sem formatação:
^\d{11}$ - CPF formatado:
^\d{3}\.\d{3}\.\d{3}-\d{2}$
Exemplos
- Válido:
11144477735 111.444.777-35: decisão pendente. A referência (JS) aceita, as outras bibliotecas não.- Inválido:
00000000000(sequência repetida) - Inválido:
1114447773(deve conter exatamente 11 caracteres) - Inválido:
111444777355(deve conter exatamente 11 caracteres)
Fontes oficiais
- OBMEP: A Matemática nos Documentos: A Matemática dos CPF´s
- LEI Nº 14.534, DE 11 DE JANEIRO DE 2023
- INSTRUÇÃO NORMATIVA RFB Nº 2.172, DE 9 DE JANEIRO DE 2024
- Protocolo de Arrecadação do DARF, Tesouro Nacional, p. 12
- Meu CPF, Receita Federal
- Cadastros: CPF e CNPJ, folheto da Receita Federal
- Superintendências Regionais da Receita Federal
- Ato Declaratório Executivo Cofis nº 10/2026, Manual de Preenchimento da e-Financeira
- Leiaute DJE da Receita Federal, campo "Número CPF ou CNPJ"
- Lei nº 14.194/2021 (LDO 2022), art. 149
- Lei nº 15.321/2025 (LDO 2026), art. 163
- normas.receita.fazenda.gov.br/sijut2consulta/link.action
Veja também CNPJ
Atualizado em
