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

CPF inválido

Boa tarde... Qualquer CPF digitado está sendo identificado como inexistente, tanto do gerador quanto o meu próprio.

Script.js

import ehUmCPF from "./valida-cpf.js";
import ehMaiorDeIdade from "./valida-idade.js";

const camposDoFormulario = document.querySelectorAll("[required]");
const formulario = document.querySelector("[data-formulario]");

formulario.addEventListener("submit", (e) =>{
    e.preventDefault();

    const listaRespostas = {
        "nome" : e.target.elements["nome"].value,
        "email" : e.target.elements["email"].value,
        "rg" : e.target.elements["rg"].value,
        "cpf" : e.target.elements["cpf"].value,
        "aniversario" : e.target.elements["aniversario"].value

    }

    localStorage.setItem("cadastro", JSON.stringify(listaRespostas));
    window.location.href = './abrir-conta-form-2.html';
})

camposDoFormulario.forEach((campo) => {
    campo.addEventListener("blur", () => verificaCampo(campo));
    campo.addEventListener("invalid", evento => evento.preventDefault());

})

const tiposDeErro = [

    'valueMissing',
    'typeMismatch',
    'patternMismatch',
    'tooShort',
    'customError'
]

const mensagens = {
    nome: {
        valueMissing: "O campo de nome não pode estar vazio.",
        patternMismatch: "Por favor, preencha um nome válido.",
        tooShort: "Por favor, preencha um nome válido."
    },
    email: {
        valueMissing: "O campo de e-mail não pode estar vazio.",
        typeMismatch: "Por favor, preencha um email válido.",
        tooShort: "Por favor, preencha um e-mail válido."
    },
    rg: {
        valueMissing: "O campo de RG não pode estar vazio.",
        patternMismatch: "Por favor, preencha um RG válido.",
        tooShort: "O campo de RG não tem caractéres suficientes."
    },
    cpf: {
        valueMissing: 'O campo de CPF não pode estar vazio.',
        patternMismatch: "Por favor, preencha um CPF válido.",
        customError: "O CPF digitado não existe.",
        tooShort: "O campo de CPF não tem caractéres suficientes."
    },
    aniversario: {
        valueMissing: 'O campo de data de nascimento não pode estar vazio.',
        customError: 'Você deve ser maior que 18 anos para se cadastrar.'
    },
    termos: {
        valueMissing: 'Você deve aceitar nossos termos antes de continuar.',
    }
}

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);
    }
   })
   const mensagemErro = campo.parentNode.querySelector('.mensagem-erro');
   const validadorDeInput = campo.checkValidity();

   if(!validadorDeInput){
    mensagemErro.textContent = mensagem;
   }else{
    mensagemErro.textContent = "";
   }
}

valida-cpf.js

export default function ehUmCPF (campo){
    const cpf = campo.value.replace(/\.|-/g,"");
   if(validaNumerosRepetidos(cpf) || validaPrimeiroDigito(cpf) || validaSegundoDigito(cpf) ) {
        campo.setCustomValidity('Esse CPF não é válido');
   }


    console.log(validaNumerosRepetidos(cpf));
}

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[10];


}
2 respostas
solução!

Olá, Andreza!

Pelo que entendi, você está tendo problemas com a validação do CPF no seu formulário em JavaScript. Você mencionou que qualquer CPF digitado está sendo identificado como inexistente, tanto do gerador quanto o seu próprio.

Pelo código que você compartilhou, é possível identificar que a validação do CPF está sendo feita no arquivo "valida-cpf.js". O problema pode estar ocorrendo nesse arquivo, mais precisamente na função "validaPrimeiroDigito" e "validaSegundoDigito".

Sugiro que você confira se as variáveis "cpf" estão sendo passadas corretamente para as funções e se os valores estão sendo tratados adequadamente. Além disso, verifique se a lógica utilizada nas funções está correta.

Espero ter ajudado e bons estudos!

Obrigada, consegui. Faltava o cpf como parâmetro nas funções validaPrimeiroDigito e validaSegundoDigito.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software