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

[Dúvida] Quando eu digito o meu CPF ou qualquer CPF tá dando erro

Bom dia !!!

Quando eu digito um CPF válido aparece a mensagem "digite um CPF válido"! Ou seja ele não tá considerando nenhum CPF válido!

Poderiam me ajudar?

script.js ----------------------------------------------

import ehUmCPF from "./valida-cpf.js";
import ehMaiorDeIdade from "./validaIdade.js";
const camposDoFormulario = document.querySelectorAll("[required]");

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

const tiposDeErros=[
    '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)
    }
    tiposDeErros.forEach(erro =>{
        if(campo.validity[erro]){
            mensagem= mensagens[campo.name][erro];
        }
    });

    const mensagemErro = campo.parentNode.querySelector('.mensagem-erro');
    const validadorDeInput = campo.checkValidity();

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

valida-cpf -------------------------------------------

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');
    } 
}
function validaNumerosRepetidos (cpf){
    const numerosRepetidos =[
        '00000000000',
        '11111111111',
        '22222222222',
        '33333333333',
        '44444444444',
        '55555555555',
        '66666666666',
        '77777777777',
        '88888888888',
        '99999999999'
    ]
    return numerosRepetidos.includes(cpf)
}

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

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

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

    return soma!=cpf[9];
}

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

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

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

    return soma!=cpf[10];
}
2 respostas
solução!

Pessoal, já encontrei o erro, estava no pattern do CPF.

<3

Oi Cicero, tudo bem?

Que bom que encontrou o erro e obrigada por dizer onde foi! Irei finalizar o tópico por você.

Um abraço e bons estudos.