1
resposta

Validação do CPF não funciona para todos CPFs válidos

Olá, A validação de CPF mostrada não trata o caso da soma ser um número múliplo de 11, pois "11 - (soma%11)" retornaria 11, porém a comparação é feita por dígito. E como exemplo o CPF 010.000.001-09 conforme a validação apresentada é inválido, porém comparando em diversos validadores online ele é válido. Segue abaixo o código para validação:

function checaDigitoVerificadorCPF(cpf, multiplicador) {
    if(multiplicador>=12){
        return true
    }
    let multiplicadorInicial = multiplicador
    let soma = 0
    let contador = 0
    const cpfSemDigitos = cpf.substr(0, multiplicador - 1).split('')
    const digitoVerificador = cpf.charAt(multiplicador - 1)
    for(; multiplicadorInicial > 1 ; multiplicadorInicial--) {
        soma = soma + cpfSemDigitos[contador] * multiplicadorInicial
        contador++
    }

    if(digitoVerificador == confirmaDigito(soma)){
        return checaDigitoVerificadorCPF(cpf,multiplicador+1)
    }
    return false
}

function confirmaDigito(soma){
    return 11 - (soma%11)
}

function checaEstruturaCPF(cpf){
    const multiplicador = 10
    return checaDigitoVerificadorCPF(cpf,multiplicador)
}

let cpf = "01000000109"

const resultado = checaEstruturaCPF(cpf)

console.log(resultado)

Eu acredito que para que a validação se torne adequada seria preciso realizar um dos seguintes procedimentos:

  1. Utilizar a fórmula apresentada aqui (tópico Cálculo do dígito verificador),
  2. Substituir "11 - (soma%11)" por "(soma*10)%11",
  3. Retornar 0 na função "confirmaDigito" quando "soma%11" for igual a 0 .
1 resposta

Olá, Nathan!

Obrigado pela sua dica! Sempre que tiver mais sugestões sobre outros cursos, será sempre bem-vindo! Peço, por gentileza, também que comente nas avaliações ao final do curso, pois é onde levamos em consideração o que devemos manter ou melhorar para os próximos cursos a serem lançados.

Bons estudos!