Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Validação de CPF

Estou tentando validar o cpf digitado pelo usuário na hora de salvar, porém a validaçção não esta funcionando... Salva mesmo digitando qualquer coisa. Minha função esta assim:

 salvar() {
        if (this.formulario.valid) {
            const dadosFormulario = this.formulario.value;
            const cpfOriginal = dadosFormulario.cpf;

            this.removerMascaras();

            if(!ValidarCpf.cpf(cpfOriginal)) {
                console.log('Passei na validação');
            }

            const cpf1 = dadosFormulario.cpf;
            const dataNascimentoFormatada = this.formatarDataParaJSON(dadosFormulario.dataNascimento);

            this.pessoa = {
                id: null,
                nome: dadosFormulario.nome,
                nomeSocial: dadosFormulario.nomeSocial,
                dataNascimento: dataNascimentoFormatada,
                cpf: dadosFormulario.cpf,
                rg: dadosFormulario.rg,
                email: dadosFormulario.email,
                telefone: dadosFormulario.telefone,
                whats: dadosFormulario.whats,
                nomeMae: dadosFormulario.nomeMae,
                nomePai: dadosFormulario.nomePai,
                sexo: dadosFormulario.sexo.nome,

                endereco: {
                    logradouro: dadosFormulario.logradouro,
                    bairro: dadosFormulario.bairro,
                    numero: dadosFormulario.numero,
                    cidade: dadosFormulario.cidade,
                    cep: dadosFormulario.cep,
                    uf: dadosFormulario.estado.nome,
                    complemento: '',
                },
            };

            this.service.verificarExistenciaCPF(cpf1).subscribe(cpfExiste => {
                if (cpfExiste) {
                    this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'CPF já cadastrado', life: 3000 });
                } else {
                    this.service.salvarPessoa(this.pessoa).subscribe((resposta) => {
                        if (resposta) {
                            this.resetForm();
                            this.messageService.add({ severity: 'success', summary: 'Successo', detail: 'A pessoa foi criada com sucesso!', life: 3000 });
                            this.tranformaPessoaDialog = true;
                        } else {

                        }
                    });
                }
            });
        }
    }

Minha classe de validação:

public static cpf(cpf: string): boolean {
        if (cpf == null) {
            return false;
        }
        if (cpf.length != 11) {
            return false;
        }
        if ((cpf == '00000000000') || (cpf == '11111111111') || (cpf == '22222222222') || (cpf == '33333333333') || (cpf == '44444444444') || (cpf == '55555555555') || (cpf == '66666666666') || (cpf == '77777777777') || (cpf == '88888888888') || (cpf == '99999999999')) {
            return false;
        }
        let numero: number = 0;
        let caracter: string = '';
        let numeros: string = '0123456789';
        let j: number = 10;
        let somatorio: number = 0;
        let resto: number = 0;
        let digito1: number = 0;
        let digito2: number = 0;
        let cpfAux: string = '';
        cpfAux = cpf.substring(0, 9);
        for (let i: number = 0; i < 9; i++) {
            caracter = cpfAux.charAt(i);
            if (numeros.search(caracter) == -1) {
                return false;
            }
            numero = Number(caracter);
            somatorio = somatorio + (numero * j);
            j--;
        }
        resto = somatorio % 11;
        digito1 = 11 - resto;
        if (digito1 > 9) {
            digito1 = 0;
        }
        j = 11;
        somatorio = 0;
        cpfAux = cpfAux + digito1;
        for (let i: number = 0; i < 10; i++) {
            caracter = cpfAux.charAt(i);
            numero = Number(caracter);
            somatorio = somatorio + (numero * j);
            j--;
        }
        resto = somatorio % 11;
        digito2 = 11 - resto;
        if (digito2 > 9) {
            digito2 = 0;
        }
        cpfAux = cpfAux + digito2;
        if (cpf != cpfAux) {
            return false;
        }
        else {
            return true;
        }
    }

Notei que neste trecho dentro da função de salvar passa direto:

if(!ValidarCpf.cpf(cpfOriginal)) {
                console.log('Passei na validação');
            }

o que pode esta ocasionando o problema de não passar pela minha validação? a titulo de informação, Possuo a mascara do cpf que é removida pela função removerMascaras.

2 respostas
solução!

Olá Natali,

A critério de curiosidade, todas as vezes em que digitou "qualquer coisa" a mensagem "Passei na validação" foi exibida no console? Se sim, então o seu método está funcionando.

De imediato vejo que precisa ajustar o bloco de código de tal validação de modo que fique assim:

// Código omitido

            if(ValidarCpf.cpf(cpfOriginal)) {
                // recuperar dados do formulário, montar objetos e realizar chamadas no serviço
            }
            else {
                console.log('Não passei na validação: CPF inválido');
            }

// Código omitido

Dessa forma, só vai persistir os dados quando o CPF for válido. Futuramente pode retornar no else algo que vá pra tela de modo que fique mais claro identificar a falha.

Deu certo, obrigada!