Validador de CPF

Estava precisando de um validador de cpf e desenvolvi este.
Resolvi postar, pois pode ajudar alguem e enriquece o forum…

Opiniões e críticas serão bem vindas…

Testei e é rápido…

// cpf = 123.654.987-98
public static boolean validateCPF(String cpf) {
        StringBuffer string = new StringBuffer(cpf);
        string = string.deleteCharAt(3).deleteCharAt(6).deleteCharAt(9);
        // Calcula o Prefixo
        StringBuffer prefixo = new StringBuffer(string.subSequence(0, 9));
        // Calcula o Sufixo
        StringBuffer sufixo = new StringBuffer(string.subSequence(9, 11));
        // Utilizado pra posterior comparação com o sufixo
        StringBuffer retorno = new StringBuffer();
        //Valor utilizado para o cálculo
        long valor = new Long(prefixo.toString()).longValue();
        //Valor utilizado apenas pra cálculo
        int incremento = 10;
        //Flag utilizada pra comparar se os números são iguais
        boolean flag = true;
        //Calcula a soma pra calcular o primeiro dígito
        int totalPrimeiroDigito = 0;
        //Calcula a soma pra calcular o segundo dígito
        int totalSegundoDigito = 0;

        for (int i = 2; i < 11; i++) {
            //Dígito utilizado pra realizar o cálculo
            long valorVerificado = valor % incremento;
            //Atualiza o valor
            valor = valor / incremento;
            //Calcula o próximo numero a ser verificado
            long proximo = valor % incremento;
            //Se forem diferentes a flag é atualizada
            if (valorVerificado != proximo) {
                flag = false;
            }
            //Atualizam os totais do primeiro e segundo dígito
            totalPrimeiroDigito += (i) * valorVerificado;
            totalSegundoDigito += valorVerificado * (i + 1);

        }
        //Primeiro dígito
        int digitoPrimiero = 11 - (totalPrimeiroDigito % 11);
        if (digitoPrimiero >= 10) {
            digitoPrimiero = 0;
        }
        //Atualiza o total pra calcular o segundo dígito
        totalSegundoDigito += digitoPrimiero * 2;
        //Segundo dígito
        int digitoSegundo = 11 - (totalSegundoDigito % 11);
        if (digitoSegundo >= 10) {
            digitoSegundo = 0;
        }
        //Concatena os dois valores pra posterior comparação com o sufixo
        retorno.append(digitoPrimiero).append(digitoSegundo);
        //Verifica se os valores são igauis e se os dígitos são diferentes
        if (retorno.toString().equals(sufixo.toString()) && (!flag)) {
            return true;
        }
        return false;
    }

Existe o brazilUtils

https://brazilutils.dev.java.net/

Ele ja possui validação de CPF, comigo sempre funcionou pelo menos :slight_smile:

Dá uma olhada aqui também

http://stella.caelum.com.br/

Opa, tem como vc da uma explicar como posso usar o seu validador de CPF ?

fmda,

Caso vc esteja utilizando SWING poderá utiliza-lo com o JFormatterField com uma mascara de CPF,
ou pode passar simplesmete uma STRING no formato de um CPF

ou seja ficaria mais ou menos assim:

[code]
class Teste{

public static void main(String[] args){
String cpf=“123.654.987-98”;
System.out.println("CPF “+cpf +” : " + validateCPF(cpf));
}

public static boolean validateCPF(String cpf) { … }
}[/code]

Ou pode acionar a uma classe e chamá-la em outro local,pelo exemplo acima poderia fazer tambem

boolean validaCPf = Teste.validateCPF("123.64.987-98");

Qualquer coisa posta ai que tamos pra tentar ajudar…

Essa pgta foi pra mim ou pro 71C4700??

exemplo no próprio link.

http://stella.caelum.com.br/core-validators.html

mas mesmo assim lá vai…


@Component
public class ClienteLogic {

   ResourceBundle resourceBundle = ResourceBundle.getBundle("StellaValidationMessages",new Locale("pt","BR"));
   MessageProducer messageProducer = new ResourceBundleMessageProducer(resourceBundle);
   boolean isFormatted = false;
   CPFValidator cpfValidator = new CPFValidator(messageProducer, isFormatted);
   CNPJValidator cnpjValidator = new CNPJValidator(messageProducer, isFormatted);


   @Remotable
   @Logic(parameters={"cpf"})
   public String validaCPF(String cpf){
       try {
           cpfValidator.assertValid(StringManager.retirarFormatacaoCpf(cpf));
           
            return "ok";
       } catch (InvalidStateException e) {
           for (ValidationMessage message : e.getInvalidMessages()) {
               System.out.println(message.getMessage());
           }
       }
       return "invalid";
   }
}