<!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>