1
resposta

[Dúvida] CPF não dá erro e aceita 14 dígitos

Oi, pessoal, tudo certo? Então, me parece que fiz o arquivo valida-cpf.js igual ao do vídeo, mas quando fiz o teste de trocar um dos números não aparece nenhum erro pra mim. Além disso, ele está deixando eu colocar até 14 dígitos sem problemas.

Alguém pode me ajudar identificando o erro, por favor? Não consegui sozinha.

export default function ehUmCpf(campo) {

    //busca onde existem . e - e substitui por "" (nada)//
    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 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(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;
    }

    return soma != cpf[10];
}
1 resposta

Oii, Dev! Tudo bem?

Agradeço por aguardar o nosso retorno.

Compreendo, uma possível solução para esse problema é adicionar uma verificação no início da função ehUmCpf, logo após a linha que define a constante cpf. Essa verificação deve checar se o tamanho do CPF é igual a 11. Caso contrário, o código deve gerar uma mensagem de erro informando que o CPF é inválido.

Para corrigir o problema da troca de números, sugiro que você adicione uma verificação no final da função ehUmCpf. Essa verificação deve checar se o campo possui uma mensagem de erro personalizada (que está sendo definida pela linha campo.setCustomValidity('Esse CPF não é válido');). Com essa mensagem no campo, significa que o CPF é inválido e o código deve gerar uma mensagem de erro informando que o CPF é inválido.

O código corrigido ficaria assim:

export default function ehUmCpf(campo) {

    //busca onde existem . e - e substitui por "" (nada)//
    const cpf = campo.value.replace(/\.|-/g, "");

    if (cpf.length !== 11) {
        campo.setCustomValidity('Esse CPF não é válido');
    } else if (validaNumerosRepetidos(cpf) || validaPrimeiroDigito(cpf) || validaSegundoDigito(cpf)) {
        campo.setCustomValidity('Esse CPF não é válido');
    } else {
        campo.setCustomValidity('');
    }
}

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 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(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;
    }

    return soma != cpf[10];
}

Espero ter ajudado. Qualquer dúvida, estarei à disposição para te auxiliar.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!