Skip to content

Instantly share code, notes, and snippets.

@williaanlopes
Last active September 29, 2022 13:12
Show Gist options
  • Save williaanlopes/244629b7323e97e81dccbf425c12b990 to your computer and use it in GitHub Desktop.
Save williaanlopes/244629b7323e97e81dccbf425c12b990 to your computer and use it in GitHub Desktop.
JavaScript para Validação de Renavam
/*
* Essa função foi retirada do seguinte site: https://victorjabur.com/2010/05/28/renavam_veiculos_java/
**/
function isValidRenavam(renavam) {
if (Number.isInteger(renavam)) {
renavam = `${renavam}`;
}
var length = 11;
var mod11 = 0;
var ultimoDigitoCalculado = 0;
// Pegando como exemplo o renavam = 639884962
// Completa com zeros a esquerda se for no padrao antigo de 9 digitos
// renavam = 00639884962
if(renavam.match("^([0-9]{9})$")){
renavam = "00" + renavam;
}
if(renavam.match("^([0-9]{10})$")){
renavam = "0" + renavam;
}
// Valida se possui 11 digitos pos formatacao
if(!renavam.match("[0-9]{11}")){
return false;
}
// Remove o digito (11 posicao)
// renavamSemDigito = 0063988496
var renavamSemDigito = renavam.substring(0, 10);
// Inverte os caracteres (reverso)
// renavamReversoSemDigito = 69488936
var renavamReversoSemDigito = renavamSemDigito.split("").reverse().join("");
var soma = 0;
// Multiplica as strings reversas do renavam pelos numeros multiplicadores
// para apenas os primeiros 8 digitos de um total de 10
// Exemplo: renavam reverso sem digito = 69488936
// 6, 9, 4, 8, 8, 9, 3, 6
// * * * * * * * *
// 2, 3, 4, 5, 6, 7, 8, 9 (numeros multiplicadores – sempre os mesmos [fixo])
// 12 + 27 + 16 + 40 + 48 + 63 + 24 + 54
// soma = 284
for (var i = 0; i < 8; i++) {
var algarismo = parseInt(renavamReversoSemDigito.substring(i, i + 1));
var multiplicador = i + 2;
soma += algarismo * multiplicador;
}
// Multiplica os dois ultimos digitos e soma
soma += renavamReversoSemDigito[8] * 2;
soma += renavamReversoSemDigito[9] * 3;
// mod11 = 284 % 11 = 9 (resto da divisao por 11)
mod11 = (soma % length);
// Faz-se a conta 11 (valor fixo) – mod11 = 11 – 9 = 2
ultimoDigitoCalculado = (length - mod11);
// ultimoDigito = Caso o valor calculado anteriormente seja 10 ou 11, transformo ele em 0
// caso contrario, eh o proprio numero
ultimoDigitoCalculado = (ultimoDigitoCalculado >= 10 ? 0 : ultimoDigitoCalculado);
// Pego o ultimo digito do renavam original (para confrontar com o calculado)
var digitoRealInformado = parseInt(renavam.substring(renavam.length -1, renavam.length));
// Comparo os digitos calculado e informado
if(ultimoDigitoCalculado == digitoRealInformado){
return true;
}
return false;
}
@williaanlopes
Copy link
Author

Corrigido BUG na quantidade de caracteres

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