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.