Como validar CPF em JavaScript, Python e PHP
Validar CPF é conferir dois dígitos calculados por módulo 11. A implementação é curta — o que costuma faltar é rejeitar as sequências repetidas, que passam na conta.
Como o cálculo funciona
Os nove primeiros dígitos são multiplicados por pesos decrescentes, de 10 a 2. A soma passa por módulo 11: resto menor que 2 gera dígito 0, caso contrário o dígito é 11 menos o resto.
O segundo dígito repete o processo com pesos de 11 a 2, já incluindo o primeiro dígito calculado.
Em JavaScript
function validarCpf(valor) {
const cpf = String(valor).replace(/\D/g, "");
if (cpf.length !== 11) return false;
// 111.111.111-11 e afins satisfazem o módulo 11: rejeite explicitamente
if (/^(\d)\1{10}$/.test(cpf)) return false;
const digito = (ate) => {
let soma = 0;
for (let i = 0; i < ate; i++) {
soma += Number(cpf[i]) * (ate + 1 - i);
}
const resto = (soma * 10) % 11;
return resto === 10 ? 0 : resto;
};
return digito(9) === Number(cpf[9]) && digito(10) === Number(cpf[10]);
}
validarCpf("529.982.247-25"); // true
validarCpf("111.111.111-11"); // falseEm Python
import re
def validar_cpf(valor: str) -> bool:
cpf = re.sub(r"\D", "", str(valor))
if len(cpf) != 11 or cpf == cpf[0] * 11:
return False
def digito(ate: int) -> int:
soma = sum(int(cpf[i]) * (ate + 1 - i) for i in range(ate))
resto = (soma * 10) % 11
return 0 if resto == 10 else resto
return digito(9) == int(cpf[9]) and digito(10) == int(cpf[10])Em PHP
function validarCpf(string $valor): bool {
$cpf = preg_replace('/\D/', '', $valor);
if (strlen($cpf) !== 11 || preg_match('/^(\d)\1{10}$/', $cpf)) {
return false;
}
for ($j = 9; $j <= 10; $j++) {
$soma = 0;
for ($i = 0; $i < $j; $i++) {
$soma += (int) $cpf[$i] * ($j + 1 - $i);
}
$digito = ((10 * $soma) % 11) % 10;
if ((int) $cpf[$j] !== $digito) return false;
}
return true;
}O que a validação não faz
- Não diz se o CPF existe: isso exige consulta à Receita Federal
- Não diz se está regular ou suspenso
- Não identifica a pessoa — o nono dígito indica apenas a região fiscal de emissão
- Não substitui a validação no servidor: qualquer verificação feita só no navegador pode ser burlada
Perguntas frequentes
- Por que rejeitar 111.111.111-11 se ele passa no cálculo?
- Porque sequências de dígitos repetidos satisfazem o módulo 11 por coincidência matemática, e nenhuma delas é um CPF emitido. Todo validador correto precisa descartá-las explicitamente.
- CPF válido significa CPF existente?
- Não. A validação confirma apenas que os dígitos verificadores fecham a conta. Saber se o CPF existe e está regular exige consulta à Receita Federal.