sganderla / questionamentos

Olá, tudo bem com vocês? Este projeto é para documentarmos os questionamentos em sala de aula.
3 stars 0 forks source link

Duvida sobre verificar o CPF #7

Closed AndreGChang closed 1 year ago

AndreGChang commented 1 year ago

Professor teria como me dizer se isto esta correto Assert.isTrue(condutor.getCpf().matches("/^\d{3}\.\d{3}\.\d{3}\-\d{2}$/"), "CPF nao esta digitado corretamente"); quer verificar o CPF e ver se ele segue a pontuacao de um CPF.

sganderla commented 1 year ago

Podemos criar uma classe que será anotada com @Component o conteúdo da classe será:

public class ValidaCPF {

    public boolean isCPF(String CPF) {
        // considera-se erro CPF's formados por uma sequencia de numeros iguais
        if (CPF.equals("00000000000") ||
            CPF.equals("11111111111") ||
            CPF.equals("22222222222") || CPF.equals("33333333333") ||
            CPF.equals("44444444444") || CPF.equals("55555555555") ||
            CPF.equals("66666666666") || CPF.equals("77777777777") ||
            CPF.equals("88888888888") || CPF.equals("99999999999") || (CPF.length() != 11)){
                return(false);
        }

        char dig10, dig11;
        int sm, i, r, num, peso;

        // "try" - protege o codigo para eventuais erros de conversao de tipo (int)
        try {
            // Calculo do 1o. Digito Verificador
            sm = 0;
            peso = 10;

            for (i=0; i<9; i++) {
                // converte o i-esimo caractere do CPF em um numero:
                // por exemplo, transforma o caractere '0' no inteiro 0
                // (48 eh a posicao de '0' na tabela ASCII)
                num = (int)(CPF.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso - 1;
            }

            r = 11 - (sm % 11);
            if ((r == 10) || (r == 11)){
                dig10 = '0';
            } 
            else { 
                dig10 = (char)(r + 48); // converte no respectivo caractere numerico
            }

            // Calculo do 2o. Digito Verificador
            sm = 0;
            peso = 11;

            for(i=0; i<10; i++) {
                num = (int)(CPF.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso - 1;
            }

            r = 11 - (sm % 11);

            if ((r == 10) || (r == 11)) {
                dig11 = '0';
            } 
            else { 
                dig11 = (char)(r + 48);
            }

            // Verifica se os digitos calculados conferem com os digitos informados.
            if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))) {
                return(true);
            }
            else { 
                return(false);
            }
        } 
        catch (InputMismatchException erro) {
            return(false);
        }
    }

    public String imprimeCPF(String CPF) {
        return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
        CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
    }
}

Para melhor organizar o seu projeto, crie um package chamado conf ou configs e adicione a classe no package

Para realizar a validação, basta injetar a classe ValidaCPF

@Autowired
private ValidaCPF validaCPF;

Lembrando. Só podemos utilizar a anotação @Autowider pois, anotamos nossa classe como @Component

Para realizarmos a validação, basta utilizar o código:

if (this.validaCPF.isCPF(CPF) == true) {
    System.out.printf("%s\n", this.validaCPF.imprimeCPF(CPF));
}
else {
    System.out.printf("Erro, CPF invalido !!!\n");
}

https://www.devmedia.com.br/validando-o-cpf-em-uma-aplicacao-java/22097