O Gerador De CPF O Gerador De CPF

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.