4
respostas

Todos os CPFs retornam como inexistentes

Segui todos os passos corretamente, porém o retorno no console é sempre de CPF inexistente, idependente de qual CPF seja.

Meu código:

export default function ehUmCPF(campo) {
    const cpf = campo.value.replace(/\.|-/g, "");
    if (validaNumerosRepetidos(cpf) || validaPrimeiroDigito(cpf) || validaSegundoDigito(cpf)) {
        console.log("Esse CPF não existe!");
    } else {
        console.log("Existe!");
    }
}

function validaNumerosRepetidos(cpf) { 
    const numerosRepetidos = [ '00000000000', '11111111111', '22222222222', '33333333333', '44444444444', '55555555555', '66666666666', '77777777777', '88888888888', '99999999999' ]

    return numerosRepetidos.includes(cpf)
}

function validaPrimeiroDigito() {
    let soma = 0;
    let multiplicador = 10;

    for(let tamanho = 0; tamanho < 9; tamanho++) {
        soma += cpf[tamanho] * multiplicador;
        multiplicador--
    }

    soma = (soma * 10) % 11;

    if (soma == 10 || soma == 11) {
        soma = 0;
    }

    return soma != cpf[9];
}

function validaSegundoDigito() {
    let soma = 0;
    let multiplicador = 11;

    for(let tamanho = 0; tamanho < 10; tamanho++) {
        soma += cpf[tamanho] * multiplicador;
        multiplicador--
    }

    soma = (soma * 10) % 11;

    if (soma == 10 || soma == 11) {
        soma = 0;
    }

    return soma != cpf[0];
}
4 respostas

Olá, Samuel! Como vai?

Pelo código que você compartilhou, parece que você está tentando validar se um CPF é válido ou não. No entanto, notei um problema no seu código: as funções validaPrimeiroDigito e validaSegundoDigito não estão recebendo o parâmetro cpf. Isso pode estar causando o erro de sempre retornar "CPF inexistente".

Para corrigir esse problema, você precisa passar o parâmetro cpf para essas duas funções. Por exemplo:

function validaPrimeiroDigito(cpf) {
    // código da função
}

function validaSegundoDigito(cpf) {
    // código da função
}

Além disso, você também precisa receber o parâmetro cpf nas funções validaPrimeiroDigito e validaSegundoDigito para poder acessar os caracteres do CPF corretamente.

Após fazer essas correções, o seu código deve funcionar corretamente. Lembre-se de testar diferentes CPFs para garantir que a validação está sendo feita corretamente.

Espero ter ajudado e bons estudos!

Olá!

Além das suas funções não estarem recebendo o CPF como parâmetro, notei que existe um erro (provavelmente de digitação) no return da função validaSegundoDigito.

É necessário comparar o resultado da soma com o cpf[10], e não com o cpf[0]. Dessa forma:

function validaSegundoDigito() {
    let soma = 0;
    let multiplicador = 11;

    for(let tamanho = 0; tamanho < 10; tamanho++) {
        soma += cpf[tamanho] * multiplicador;
        multiplicador--
    }

    soma = (soma * 10) % 11;

    if (soma == 10 || soma == 11) {
        soma = 0;
    }

    return soma != cpf[10];
}

Boa noite, Samuel, tudo bem? Estou acompanhando o curso e percebi a mesma questão e analisando o código apresentado na aula identifiquei que as duas condicionais IF das duas funções "validaPrimeiroDigito" e "validaSegundoDigito" apresentam o seguinte script.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

if (soma == 10 || soma == 1) {
    soma = 0;
}

Fiz a correção e as funções retornaram normalmente para cpf existente ou não.

Boa noite!

Primeiro você coloca cpf nos parâmetros das funções:

function validaNumerosRepitidos(cpf) {
    const numerosRepitidos = [
        '00000000000',
        '11111111111',
        '22222222222',
        '33333333333',
        '44444444444',
        '55555555555',
        '66666666666',
        '77777777777',
        '88888888888',
        '99999999999'
        ]

        return numerosRepitidos.includes(cpf)
}

function validaPrimeiroDigito(cpf){
    let soma = 0;
    let multiplicador = 10;

    for(let tamanho = 0; tamanho < 9; tamanho++) {
        soma += cpf[tamanho] * multiplicador;
        multiplicador--;
    } 
    soma = (soma * 10) %11;

    if(soma == 10 || soma == 11){
        soma = 0;
    }
    console.log(soma)
    return soma != cpf[9];
    
}

function validaSegundoDigito(cpf){
    let soma = 0;
    let multiplicador = 11;

    for(let tamanho = 0; tamanho < 10; tamanho++) {
        soma += cpf[tamanho] * multiplicador;
        multiplicador--;
    } 
    soma = (soma * 10) %11;

    if(soma == 10 || soma == 11){
        soma = 0;
    }
    console.log(soma)
    return soma != cpf[10];
    
}

Depois você precisa ir no script.js e adicionar o campo.setCustomValidity(' ') dessa forma:

function verificaCampo(campo) {
    let mensagem = "";
    campo.setCustomValidity('');
    if (campo.name == "cpf" && campo.value.length >= 11) {
        ehUmCPF(campo);
    }
    if (campo.name == "aniversario" && campo.value != "") {
        ehMaiorDeIdade(campo);
    }
    tiposDeErro.forEach(erro => {
        if (campo.validity[erro]) {
            mensagem = mensagens[campo.name][erro];
            console.log(mensagem);
        }
    })

Assim o erro vai ser limpo logo após o cpf ser validado!