Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Código disponibilizado no github para aula 5 do curso está errado, não afeta o aprendizado de REGEX

Código do github está incorreto, apesar de não interferir na funcionalidade das regex que estamos testando é sempre bom ter tudo correto e funcionando como deveria. Comentei na função calculaDigitoVerificador o que está errado. Código no github:

//Função que calcula o Dígito verificador do CPF
function calculaDigitoVerificador(cpf, multiplicadorInicial) {
    let soma = 0;
    let multiplicador = multiplicadorInicial;

    for (let tamanho = 0; tamanho < 9 + multiplicadorInicial; tamanho++) { // Nessa linha a condição da iteração do for está errada
        soma += cpf[tamanho] * multiplicador;
        multiplicador--;
    }

    let resto = soma % 11;

    if (resto < 2) {
        return cpf[9 + multiplicadorInicial] === 0; // Comparação estrita de string e número além de out of bounds.
    } else {
        return cpf[9 + multiplicadorInicial] === 11 - resto; // Comparação estrita de string e número além de out of bounds.
    }
}

// Função principal para validar o CPF
export default function ehUmCPF(campo) {
    const cpfSemPontuacao = removePontuacao(campo);
    
    if (todosDigitosIguais(cpfSemPontuacao) || calculaDigitoVerificador(cpfSemPontuacao, 10) || calculaDigitoVerificador(cpfSemPontuacao, 11) ||  cpfSemPontuacao.match(/[A-Za-zÀ-ÿ]+/)) { //inserir caracteres especiais como desafio
        console.log("Dígitos iguais:",todosDigitosIguais(cpfSemPontuacao));
        console.log("CPF sem pontuação:", cpfSemPontuacao);
        campo.setCustomValidity('Esse CPF não é válido');
    }
}
  1. Sugestão para correção função calculaDigitoVerificador ao receber os parametros 10 ou 11, iterar até multiplicadorInicial - 1;
  2. Se for realizar comparação estrita usar parseInt() e comparar o índice correto;
  for (let tamanho = 0; tamanho < multiplicadorInicial - 1; tamanho++) {
  
    if (resto < 2) {
    return parseInt(cpf[multiplicadorInicial - 1]) === 0;
  } else {
    return parseInt(cpf[multiplicadorInicial - 1]) === 11 - resto;
  }

Na função ehUmCpf()

  1. Mudar a condição para verificar se o retorno de um dos dígitos verificadores do CPF for inválido
!calculaDigitoVerificador(cpfSemPontuacao, 10) ||
!calculaDigitoVerificador(cpfSemPontuacao, 11)
1 resposta
solução!

Olá Israel. Tudo bem?

Muito obrigado pelo feedback, eu vou encaminhar para equipe de conteúdo para eles analisarem e já corrigirem. Ajudou muito com os detalhes, continue assim!

Bons estudos!