Pular para o conteúdo principal
DevTools by Decussi
  • Ferramentas
  • Dados
  • Segurança
  • Rede
  • Texto
  • Data
  • Web
  • Dev
  • SEO
  • Brasil
Ferramentas
DevTools

Ferramentas para desenvolvedores, em português. Sem cadastro e sem instalação.

Criado e mantido por Decussi

Ferramentas

  • Todas as ferramentas
  • Dados
  • Segurança
  • Rede
  • Texto
  • Data
  • Web
  • Dev
  • SEO
  • Brasil

Referência

  • Consulta rápida
  • Guias
  • Códigos HTTP
  • Cron
  • Checagens de SEO

Desenvolvedores

  • API e devs
  • llms.txt
  • ai.txt
  • Sitemap

Newsletter

Receba novidades e novas ferramentas no seu email.

Sugira uma ferramenta

Tem uma ideia? Envie sua sugestão.

  1. Início
  2. /Guias
  3. /Linguagens

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

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");  // false

Em Python

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

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.

Resolva na prática

  • Validador de CPF
  • Gerador de CPF para testes
  • Regex brasileiras

Guias relacionados

  • Base64 em JavaScript: codificar e decodificar sem quebrar acentos