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

[Sugestão] Outra forma de verificar os dígitos do CPF

Sabia que existe um cálculo para verificar os dígitos verificadores (os que ficam depois do hífen) do número do CPF são válidos?

Não é algo simples de explicar, mas dá pra ler nesse link: https://www.calculadorafacil.com.br/computacao/validar-cpf

Com isso em mente criei a seguinte função para fazer essa validação:

function verificaDV(cpf) {
    let cpfQuebrado = cpf.split('')
    cpfQuebrado = cpfQuebrado.map(item => Number(item))

    let verifica1 = 0
    for (let i = 0; i < 9; i++) {
        verifica1 += cpfQuebrado[i] * (10 - i);
    }
    let verifica1d = verifica1 % 11
    let primeiroDigitoVdd = verifica1d == cpfQuebrado[9] || verifica1d == 10 && cpfQuebrado[9] == 0 ? true : false

    let verifica2 = 0
    for (let i = 0; i < 10; i++) {
        verifica2 += cpfQuebrado[i] * (11 - i)
    }
    let verifica2d = verifica2 % 11
    let segundoDigitoVdd = verifica2d == cpfQuebrado[10] || [10, 11].includes(verifica2d) && cpfQuebrado[9] == 0 ? true : false

    if (!primeiroDigitoVdd || !segundoDigitoVdd) {
        return 'Este CPF não é válido'
    }
}

Obs.: a linha cpfQuebrado = cpfQuebrado.map(item => Number(item)) poderia ser removida, pois a conversão para o tipo número já é feito automaticamente pelo JavaScript quando é feita uma operação matemática.

2 respostas

Olá, estudante.

Tudo bem?

Obrigado por compartilhar sua função de validação de CPF. É interessante saber que existe um cálculo para verificar os dígitos verificadores do CPF.

A função que você criou parece estar funcionando corretamente. Ela separa os dígitos do CPF em um array, realiza os cálculos para verificar se os dígitos verificadores são válidos e retorna uma mensagem caso o CPF não seja válido.

Espero ter ajudado e bons estudos!

solução!

Verifiquei que havia um erro na função. A versão corrigida dela é a seguinte:

function verificaDV(cpf) {
    let cpfQuebrado = cpf.split('')
    
    let v1 = 0
    for (let i = 0; i < 9; i++) {v1 += cpfQuebrado[i] * (i + 1)}
    let verifica1d = v1 % 11
    if (verifica1d == 10) {verifica1d = 0}
    let primeiroDigitoVdd = verifica1d == cpfQuebrado[9] ? true : false

    let v2 = 0
    for (let i = 0; i < 10; i++) {v2 += cpfQuebrado[i] * i}
    let verifica2d = v2 % 11
    if (verifica2d == 10) {
        verifica2d = 0
    }
    let segundoDigitoVdd = verifica2d == cpfQuebrado[10] ? true : false

    if (!primeiroDigitoVdd || !segundoDigitoVdd) {
        return 'Este CPF não é válido'
    }

    return 'CPF válido'
}