Skip to content

Instantly share code, notes, and snippets.

@renatoargh
Last active May 27, 2022 21:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save renatoargh/5589104 to your computer and use it in GitHub Desktop.
Save renatoargh/5589104 to your computer and use it in GitHub Desktop.
Algoritmo para cálculo do dígito verificador via mod11 em JavaScript
//valor:
// string contendo os números a terem seu mod11 calculado.
//restornarResto:
// boleano indicando se deve ser retornado o apenas o resto do multiplicatório ou o resultado da subtração por 11.
//multiplicadores:
// conjunto de números que multiplicarão ciclicamente o valor de entrada.
function mod11(valor, retornarResto, multiplicadores){
if(typeof retornarResto === "undefined") retornarResto = false;
if(typeof multiplicadores === "undefined") multiplicadores = [2, 3, 4, 5, 6, 7, 8, 9];
var i = 0;
var resto = valor.split("").reduceRight(function(anterior, atual){
if(i > multiplicadores.length - 1) i = 0;
return (multiplicadores[i++] * parseInt(atual, 10)) + anterior;
}, 0) % 11;
return retornarResto ? resto : (11 - resto >= 10 ? 0 : 11 - resto);
}
@renatoargh
Copy link
Author

Para se obter os dígitos verificadores de um CPF, pode-se utilizar este algoritmo:

function obterDigitosVerificadoresDoCpf(inicio){
    var primeiro = mod11(inicio, true, [9, 8, 7, 6, 5, 4, 3, 2, 1]);
    var segundo = mod11(inicio + primeiro, true, [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]);

    return primeiro + segundo;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment