A função
Java
import java.util.regex.Pattern;
public final class Doc {
public static boolean isValidCpf(String cpf) {
cpf = cpf.replaceAll("\\D", "");
if (cpf.length() != 11 || cpf.matches("(\\d)\\1{10}")) return false;
for (int i = 9; i < 11; i++) {
int soma = 0;
for (int j = 0; j < i; j++) soma += (cpf.charAt(j) - '0') * ((i + 1) - j);
int dv = (soma * 10 % 11) % 10;
if (dv != cpf.charAt(i) - '0') return false;
}
return true;
}
}O cálculo é o do módulo 11: cada dígito é multiplicado por um peso decrescente, somado, e o resto da divisão por 11 define o verificador. O laço roda duas vezes — uma para cada dígito verificador.
Como usar
Java
Doc.isValidCpf("111.444.777-35"); // true
Doc.isValidCpf("111.444.777-00"); // false
Doc.isValidCpf("11111111111"); // false (repetidos)O método já aceita o CPF com ou sem máscara: o replaceAll("\\D", "") remove tudo que não for dígito antes de calcular.
publicidade
Cuidados
- Regex só valida formato. Um padrão como
\d{11}confirma que são 11 dígitos, mas não confere o verificador — quem faz isso é o método acima. Veja regex de CPF e CNPJ. - Sequências repetidas (
11111111111) passariam no módulo 11, por isso o método as descarta antes comcpf.matches("(\\d)\\1{10}"). - Válido ≠ existe. O método confirma a consistência matemática, não se o CPF foi emitido a alguém.
- Guarde sem máscara (só os 11 dígitos) e formate só na exibição.
Continue
Perguntas frequentes
Como validar um CPF em Java sem biblioteca?
Com um método estático que limpa a pontuação com
replaceAll("\\D", ""), descarta sequências repetidas e confere os dois dígitos verificadores pelo módulo 11. Usa só java.util.regex.Por que rejeitar 11111111111?
Sequências repetidas passam no cálculo do módulo 11, mas não são CPFs válidos. A função as descarta antes com
cpf.matches("(\\d)\\1{10}").O CPF validado existe de fato?
Não. A função confere a consistência matemática (os verificadores), não se o CPF foi emitido a alguém pela Receita Federal.
Código em Java verificado. Algoritmo módulo 11 oficial. Revisado em 06/2026.