Função para Validar CPF em Java
Classe Java para validar CPF usando o algoritmo de módulo 11. Pode ser usada em qualquer projeto Java — Spring Boot, Jakarta EE, aplicações desktop ou Android.
Código
public class CPFValidator {
public static boolean validate(String cpf) {
// Remove caracteres não numéricos
cpf = cpf.replaceAll("\\D", "");
// Verifica se tem 11 dígitos
if (cpf.length() != 11) return false;
// Rejeita CPFs com todos os dígitos iguais
if (cpf.matches("(\\d)\\1{10}")) return false;
// Calcula o primeiro dígito verificador
int sum = 0;
for (int i = 0; i < 9; i++) {
sum += Character.getNumericValue(cpf.charAt(i)) * (10 - i);
}
int remainder = sum % 11;
int digit1 = remainder < 2 ? 0 : 11 - remainder;
// Calcula o segundo dígito verificador
sum = 0;
for (int i = 0; i < 10; i++) {
sum += Character.getNumericValue(cpf.charAt(i)) * (11 - i);
}
remainder = sum % 11;
int digit2 = remainder < 2 ? 0 : 11 - remainder;
// Verifica se os dígitos calculados conferem
return Character.getNumericValue(cpf.charAt(9)) == digit1
&& Character.getNumericValue(cpf.charAt(10)) == digit2;
}
}
Análise do código
replaceAll("\\D", "") remove caracteres não numéricos. matches("(\\d)\\1{10}") usa backreference regex para rejeitar CPFs com 11 dígitos iguais.
O primeiro loop calcula o primeiro dígito verificador com pesos de 10 a 2. O segundo loop calcula o segundo com pesos de 11 a 2. Ambos usam Character.getNumericValue() para converter char em int.
Cada resultado passa por % 11 com a regra: resto < 2 → 0, senão → 11 - resto. A comparação final verifica os dígitos nas posições 9 e 10 da string.
Uso
CPFValidator.validate("529.982.247-25"); // true
CPFValidator.validate("111.111.111-11"); // false
CPFValidator.validate("52998224725"); // true
Testes
Testes com JUnit 5:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CPFValidatorTest {
@Test
void cpfValidoComPontuacao() {
assertTrue(CPFValidator.validate("529.982.247-25"));
}
@Test
void cpfValidoSemPontuacao() {
assertTrue(CPFValidator.validate("52998224725"));
}
@Test
void cpfComDigitosRepetidos() {
assertFalse(CPFValidator.validate("111.111.111-11"));
}
@Test
void cpfComDigitoVerificadorIncorreto() {
assertFalse(CPFValidator.validate("529.982.247-26"));
}
@Test
void cpfComTamanhoIncorreto() {
assertFalse(CPFValidator.validate("123.456.789"));
}
}
Para gerar CPFs de teste para o seu projeto Java, use o gerador de CPF.