<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"http://www.w3.org/TR/html4/strict.dtd">
<html lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta charset="utf-8">
<title>Calculadora do Dígito Verificador do NUP, conforme Portaria Interministerial 2321, de 30 de dezembro de 2014</title>
<style>
h1 {
font-size: 1em;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
font-weight: normal;
}
h2.negrito {
font-size: 1em;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
font-weight: bold;
}
h2.normal {
font-size: 1em;
text-align: center;
font-family: Tahoma, Geneva, sans-serif;
font-weight: normal;
}
p{
font-size: 1em;
font-family: Tahoma, Geneva, sans-serif;
}
</style>
</head>
<body>
<h1>Ministério do Planejamento, Orçamento e Gestão</h1>
<h1>Ministério da Justiça</h1>
<h2 class="normal">Portaria Interministerial MJ/MP n° 2.321, de 30 de dezembro de 2014 </h2>
<h2 class="negrito">Calculadora dos dígitos verificadores (DVs) do Número Único de Protocolo (NUP)</h2>
<p>Informe o número-base do NUP, sem os caracteres especiais:</p>
<input id="nup" type="text" maxlength="19" onkeypress="return EnviaFormulario(event);">
<button type="button" onclick="calculaDV()">Calcular DVs</button>
<p id="resultado"></p>
<script>
function calculaDV() {
var x, text;
// Get the value of the input field with id="numb"
x = document.getElementById("nup").value;
//Apaga os pontos
x = x.replace(".", "");
//Apaga as virgulas
x = x.replace(",", "");
//Apaga o +
x = x.replace("+", "");
//Apaga o x = x.replace("-", "");
//Apaga o "E"
x = x.replace("E", "");
//Apaga o "e"
x = x.replace("e", "");
//Tamanho do campo digitado
var tamanhoNUP = x.length;
// Se o digitado não é número ou é menor que 0 ou se não tem 19 dígitos sem o DV
if (isNaN(x) || x <= 0 || tamanhoNUP != 19) {
text = "Entrada inválida. Informe exatamente os 19 dígitos que compõem o número-base do NUP.";
} else {
//O javascripst consegue calcular corretamente, sem erro de arredondamento, números com até 13 dígitos.
// devemos quebrar o número em DUAS partes, e fazer o cálculo de forma fatorada.
//Retorna a string dele
var StringDoNUP = x.toString();
//Pega os 12 primeiros dígitos do NUP
var parte1 = StringDoNUP.substring(0, 12);
//Pega os últimos dígitos do NUP
var parte2 = StringDoNUP.substring(12, StringDoNUP.length);
//Adiciona os dois zeros finais à segunda parte do NUP
parte2 = parte2 + "00";
//Resto da divisão inteira por 97
var resto1 = parte1 % 97;
//Concatena ao resto da divisão a segunda parte do NUP, depois calcula o resto da divisão inteira
var resto2 = (resto1.toString() + parte2) % 97;
//Calcula o DV
var DV = 98 - resto2;
//Se o DV foi menor que 10, tem que adicionar um zero a esquerda
if (DV < 10) {
DV = "0" + DV;
}
//Descobre quais são os dígitos separadamente
var primeiroDV = (DV.toString()).substring(0, 1);
var segundoDV = (DV.toString()).substring(1, 2);
//Formata o texto
text = "Os DVs gerados são " + primeiroDV + " e " + segundoDV + ", resultando no NUP " + x.slice(0, 7) + "."+ x.slice(7, 15) + "/" + x.slice(15, 19) + "-" + DV + ".";
}
//Atribui o texto ao label
document.getElementById("resultado").innerHTML = text;
}
//Função que verifica se a tecla digitada foi o enter
function OnEnter(evt)
{
var key_code = evt.keyCode ? evt.keyCode :
evt.charCode ? evt.charCode :
evt.which ? evt.which : void 0;
if (key_code == 13)
{
return true;
}
}
//Trata do evento de tecla pressionada no edit
function EnviaFormulario(e)
{
if(OnEnter(e))
{
//Se a tecla digitada foi o enter, faz o cálculo do DV
calculaDV();
return false;
}
else
{
return true;
}
}
</script>
</body>
</html>
Download

cálculo do DV do NUP