Validar CPF
Digite ou cole um CPF, ou uma lista, e veja na hora se os dígitos verificadores conferem.
Validar CPF
Confere no seu navegador. Nada do que você digita ou cola é enviado.
Validar em lote: cole uma coluna da planilha
CSV (Excel) abre com dois cliques no Excel em português (ponto e vírgula, acentos certos). CSV usa vírgula, para programas e scripts.
Um CPF é válido no cálculo quando tem 11 dígitos, não é uma sequência repetida e os dois últimos dígitos batem com o módulo 11 dos anteriores. O validador faz essa conta, mostra o passo a passo e, se houver erro, diz qual dígito deveria ser. Ele não informa se o CPF existe ou está regular na Receita Federal.
O que o validador confere
O número passa por estas etapas, nesta ordem. A primeira que falhar vira a mensagem de erro (com o campo vazio, a tela só pede o número):
- Limpeza: tira pontos, traço e espaços.
- Caracteres: o CPF só tem dígitos. Letra ou símbolo no meio é recusado.
- Tamanho: tem de ter 11 dígitos depois da limpeza.
- Repetição: sequências como
000.000.000-00e999.999.999-99são recusadas. - Cálculo: o 1º dígito verificador é recalculado com os pesos de 10 a 2, e o 2º com os pesos de 11 a 2.
Exemplo: onde está o erro
Digite 111.444.777-36. A base 111444777 dá soma 162 com os pesos de 10 a 2, resto 8, e o 1º dígito 3 confere. Na segunda conta, com os pesos de 11 a 2, a soma é 204, o resto é 6 e o 2º dígito deveria ser 5. O validador responde: "O 2º dígito deveria ser 5, e não 6."
Esse tipo de mensagem ajuda a separar erro de digitação de número inventado. Quando só o último dígito está trocado, quase sempre foi um erro ao digitar.
Digite um número completo para ver a conta.
Conta feita com o número 111.444.777-35.
Gere ou valide outro acima e a conta muda junto.
1º dígito verificador
| 1º dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 |
|---|---|---|---|---|---|---|---|---|---|
| Dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 |
| Peso | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 10 | 9 | 8 | 28 | 24 | 20 | 28 | 21 | 14 |
Resto 8 é maior que 1, então DV = 11 − 8 = 3.
2º dígito verificador
| 2º dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 3 |
|---|---|---|---|---|---|---|---|---|---|---|
| Dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 3 |
| Peso | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 11 | 10 | 9 | 32 | 28 | 24 | 35 | 28 | 21 | 6 |
Resto 6 é maior que 1, então DV = 11 − 6 = 5.
Por que 111.111.111-11 é recusado
Faça a conta e você vai ver que 111.111.111-11 passa no módulo 11. O mesmo acontece com as outras sequências de um dígito só. Elas fecham a conta por coincidência da aritmética, não porque alguém tenha esse CPF.
Esses números aparecem muito em formulário, digitados por quem quer pular o campo. Por isso todo validador sério tem uma regra a mais que recusa sequências repetidas. Se o seu sistema aceita 000.000.000-00, falta essa regra.
O que o validador não confere
O dígito verificador só mostra que o número foi montado pela regra. Ele não diz se o CPF foi emitido, a quem pertence nem se está regular.
Para saber a situação cadastral de um CPF, use o serviço de consulta no site da Receita Federal. Este validador não consulta base nenhuma: a conta é feita no seu navegador e o número não é enviado a lugar algum.
O que o 9º dígito diz
O 9º dígito indica a região fiscal onde o CPF foi emitido: 8 é São Paulo, 7 é Rio de Janeiro e Espírito Santo, 0 é Rio Grande do Sul, e assim por diante. A tabela completa está na página do gerador de CPF.
Isso não entra na validação. Um CPF emitido no Paraná continua válido para quem mora em Pernambuco, e a pessoa não troca de número ao se mudar. Não use esse dígito para recusar cadastro nem para deduzir onde a pessoa mora.
Validar uma lista de CPFs
Cole a coluna da planilha no campo de lote, um CPF por linha, com ou sem máscara. Cada linha volta marcada como válida ou inválida, com o motivo, e você pode baixar o resultado em CSV ou em CSV (Excel), que abre com acentos e colunas certas no Excel em português.
É útil para conferir um cadastro antes de importar num sistema de folha, CRM ou ERP. Os problemas mais comuns numa planilha são zeros à esquerda apagados pelo Excel, espaços copiados junto e CPFs com 10 dígitos porque a célula estava como número. Como a validação roda no navegador, os CPFs da lista não saem do seu computador.
Como validar CPF no seu código
Use a regex só para conferir o formato e faça a conta do dígito à parte. Uma regex não consegue calcular o módulo 11, então ela sozinha aceita CPFs com dígito errado.
Para aceitar com ou sem máscara, a expressão é ^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$. Depois, limpe tudo que não for dígito, recuse as sequências repetidas e recalcule os dois dígitos. O código abaixo faz as três coisas em JavaScript, Python e PostgreSQL.
function dvCpf(digitos) {
const soma = digitos.reduce((s, d, i) => s + d * (digitos.length + 1 - i), 0);
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
}
function validarCpf(entrada) {
const cpf = entrada.replace(/[.\-\s]/g, '');
if (cpf.length === 0) return { valido: false, motivo: 'vazio' };
if (!/^[0-9]+$/.test(cpf)) return { valido: false, motivo: 'caractere' };
if (cpf.length !== 11) return { valido: false, motivo: 'tamanho' };
if (/^(\d)\1{10}$/.test(cpf)) return { valido: false, motivo: 'repetido' };
const d = [...cpf].map(Number);
const dv1 = dvCpf(d.slice(0, 9));
const dv2 = dvCpf([...d.slice(0, 9), dv1]);
if (dv1 !== d[9] || dv2 !== d[10]) {
return { valido: false, motivo: 'dv', esperado: String(dv1) + String(dv2) };
}
return { valido: true };
}
validarCpf('111.444.777-36'); // { valido: false, motivo: 'dv', esperado: '35' } import re
def dv_cpf(digitos):
soma = sum(d * (len(digitos) + 1 - i) for i, d in enumerate(digitos))
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def validar_cpf(entrada: str) -> bool:
cpf = re.sub(r"[.\-\s]", "", entrada)
if not re.fullmatch(r"[0-9]{11}", cpf) or len(set(cpf)) == 1:
return False
d = [int(c) for c in cpf]
return dv_cpf(d[:9]) == d[9] and dv_cpf(d[:10]) == d[10]
print(validar_cpf("111.444.777-35")) # True CREATE OR REPLACE FUNCTION cpf_valido(entrada text) RETURNS boolean AS $$
DECLARE
c text := regexp_replace(entrada, '[. -]', '', 'g');
soma int;
resto int;
dv1 int;
dv2 int;
BEGIN
IF c !~ '^[0-9]{11}$' OR c ~ '^(.)\1{10}$' THEN
RETURN false;
END IF;
soma := 0;
FOR i IN 1..9 LOOP
soma := soma + substr(c, i, 1)::int * (11 - i);
END LOOP;
resto := soma % 11;
dv1 := CASE WHEN resto < 2 THEN 0 ELSE 11 - resto END;
soma := 0;
FOR i IN 1..10 LOOP
soma := soma + substr(c, i, 1)::int * (12 - i);
END LOOP;
resto := soma % 11;
dv2 := CASE WHEN resto < 2 THEN 0 ELSE 11 - resto END;
RETURN substr(c, 10, 1)::int = dv1 AND substr(c, 11, 1)::int = dv2;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
-- SELECT cpf FROM cliente WHERE NOT cpf_valido(cpf); Perguntas frequentes
Como saber se um CPF é válido?
Recalcule os dois dígitos verificadores pelo módulo 11 e compare com os dois últimos dígitos do número. Se baterem, o CPF tem 11 dígitos e não é uma sequência repetida, ele é válido no cálculo.
CPF válido quer dizer que ele existe?
Não. O cálculo só mostra que o número segue a regra. Para saber se o CPF foi emitido e está regular, consulte a situação cadastral no site da Receita Federal.
Por que 000.000.000-00 não é aceito?
Porque as sequências de um dígito só fecham o módulo 11 por coincidência, mas não são CPFs reais. Validadores recusam esses números com uma regra extra.
Qual a regex para validar CPF?
Para o formato, com ou sem máscara: ^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$. A regex não confere o dígito verificador, então faça o cálculo do módulo 11 depois dela.
Posso validar vários CPFs de uma vez?
Sim. Cole uma coluna da planilha, um CPF por linha, e veja quais são inválidos e por quê. O resultado pode ser baixado em CSV ou CSV (Excel).
O CPF que eu digito fica salvo?
Não. A validação roda no seu navegador, e o número não é enviado a nenhum servidor nem guardado.
Veja também
Gerador de CPF
CPFs fictícios, por estado de emissão, um a um ou em lote.
137.122.747-00Validar CNPJ
Confira um número ou cole uma coluna inteira da planilha.
I3.AYB.6K2/0001-03 · VálidoGerador de PIS
PIS, PASEP, NIS e NIT fictícios, com a conta do dígito e a geração em lote.
137.12274.71-7Gerador de CNPJ
Numérico ou alfanumérico, de 1 a 10.000, em CSV, JSON ou SQL.
13.712.274/0001-55Atualizado em 14/11/2026.