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.

  • Matriz de paridade

Validar

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-38 vê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-00 a 999.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âmetroTipoObrigatório
cpfstringsim
retornaboolean

Valida um CPF.

  • Retorna false para um número reservado (todos os dígitos iguais, como 00000000000) 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)
Código: brazilian-utils/javascript
Teste com JavaScript isValidCpf
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 (37) e o resultado em cada biblioteca cpf.isValid

Formatar

Formata um CPF como 000.000.000-00.

  • options.pad primeiro completa o valor com zeros à esquerda até 11 dígitos.
  • options.obfuscate oculta 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 (-12345678909 dava 123.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, pad retornava 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 com 0.

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
optionsFormatCpfOptionsnão
options.padbooleannão
options.obfuscatebooleannão
retornastring

Formata um CPF.

  • Opções (FormatCpfOptions): pad preenche o valor com zeros à esquerda até 11 dígitos antes de aplicar a máscara (padrão false); obfuscate esconde os 3 primeiros dígitos e os 2 dígitos verificadores. Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • obfuscate é aplicada após o pad. 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-**
Código: brazilian-utils/javascript
Teste com JavaScript formatCpf
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 (69) e o resultado em cada biblioteca cpf.format

Interpretar

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âmetroTipoObrigatório
valuestring | numbersim
retornastring

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'); // 74650688000
Código: brazilian-utils/javascript
Teste com JavaScript parseCpf
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 (23) e o resultado em cada biblioteca cpf.parse

Gerar

Gera um CPF aleatório e válido: 11 dígitos, sem máscara.

  • state (um código de estado como SP) define o 9º dígito, a região fiscal, com a região desse estado (veja cpf.getInfo). O código é lido sem distinção de caixa e sem espaços nas pontas, então "sp" e " SP " são SP. 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âmetroTipoObrigatório
stateStateCodenão
retornastring

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.
  • state ignora maiúsculas/minúsculas e espaços nas pontas ('sp' é 'SP'). Sem state, 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 MG
Código: brazilian-utils/javascript
Teste com JavaScript generateCpf
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 (4) e o resultado em cada biblioteca cpf.generate

Decodificar

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.

  • base são os 8 primeiros dígitos. checkDigits são os 2 últimos.
  • fiscalRegion é o 9º dígito, como string: 1 a 9 para a 1ª a 9ª Região Fiscal da Receita Federal, e 0 para a 10ª.
  • states lista 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 null para um número reservado como 00000000000 e para qualquer valor que não é string.
  • Retorna um objeto novo, com uma lista states nova, a cada chamada.
ParâmetroTipoObrigatório
valuestringsim
retornaCpfInfo | 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.

fiscalRegionstates
"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/javascript
Teste com JavaScript getCpfInfo
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 (23) e o resultado em cada biblioteca cpf.getInfo

Guias

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

  1. A entrada deve conter exatamente 11 caracteres.
  2. Os dígitos verificadores vêm do algoritmo padrão (mod 11).
  3. Sequências com todos os dígitos iguais (por exemplo, 00000000000) são inválidas.

Algoritmo

  1. Rejeitar a entrada se o tamanho != 11 ou se for uma sequência repetida.
  2. 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))
  3. 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))
  4. 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-38 vê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-00 a 999.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ígitoEstados
1DF, GO, MT, MS, TO
2AC, AP, AM, PA, RO, RR
3CE, MA, PI
4AL, PB, PE, RN
5BA, SE
6MG
7ES, RJ
8SP
9PR, SC
0RS
  • 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.
  • getCpfInfo retorna { 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. Retorna null exatamente quando isValidCpf é false.
  • generateCpf(state) escreve o dígito da região de state. 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

Veja também CNPJ

Atualizado em

Nesta página