Página 1 de 1

MODULO 97 BASE 10 NO EXCCEL

Enviado: 28 Ago 2019 às 16:02
por luiseugenio
Alguma alma caridosa que saiba transpor isso no excel, sem usar vb.
Já tentei usando a função mod, mas não estou conseguindo.

O número é composto de até 20 algarismos, no formato NNNNNNN-DD.AAAA.JTR.OOOO, onde o DV está colocado imediatamente após o Número Seqüencial (NNNNNNN). O DV é calculado tomando-se o número do Processo e saltando o próprio DV (se for conhecido), ou seja, tomando-se NNNNNNNAAAAJTROOOO. Calcula-se então 98 menos o resto de (NNNNNNNAAAAJTROOOO x 100 / 97). Este resultado confirma o número do DV, com dois dígitos. A forma de cálculo é conhecida como "Módulo 97, Base 10, ISO 7064".

Em java:<script type="text/javascript">
function procJud(form)
{
procJudNum=(form.procJudNum.value);

if(procJudNum.length>18){alert("Erro. Não existe nº de processo com mais de 18 dígitos (fora o DV).\nIntroduza 18 dígitos, no máximo.");}

procJudNum="00000000000000000" + procJudNum;
procJudNum=procJudNum.slice(procJudNum.length-18);

procDig1=procJudNum.slice(0,1); b1=eval(procDig1); b1=b1*10000000000;
procDig2=procJudNum.slice(1,2); b2=eval(procDig2); b2=b2*1000000000;
procDig3=procJudNum.slice(2,3); b3=eval(procDig3); b3=b3*100000000;
procDig4=procJudNum.slice(3,4); b4=eval(procDig4); b4=b4*10000000;
procDig5=procJudNum.slice(4,5); b5=eval(procDig5); b5=b5*1000000;
procDig6=procJudNum.slice(5,6); b6=eval(procDig6); b6=b6*100000;
procDig7=procJudNum.slice(6,7); b7=eval(procDig7); b7=b7*10000;
procDig8=procJudNum.slice(7,8); b8=eval(procDig8); b8=b8*1000;
procDig9=procJudNum.slice(8,9); b9=eval(procDig9); b9=b9*100;
procDig10=procJudNum.slice(9,10); b10=eval(procDig10); b10=b10*10;
procDig11=procJudNum.slice(10,11); b11=eval(procDig11);

proc1a11=b1+b2+b3+b4+b5+b6+b7+b8+b9+b10+b11;
resto1=proc1a11%97;

procDig12=procJudNum.slice(11,12); b12=eval(procDig12); b12=b12*1000000;
procDig13=procJudNum.slice(12,13); b13=eval(procDig13); b13=b13*100000;
procDig14=procJudNum.slice(13,14); b14=eval(procDig14); b14=b14*10000;
procDig15=procJudNum.slice(14,15); b15=eval(procDig15); b15=b15*1000;
procDig16=procJudNum.slice(15,16); b16=eval(procDig16); b16=b16*100;
procDig17=procJudNum.slice(16,17); b17=eval(procDig17); b17=b17*10;
procDig18=procJudNum.slice(17); b18=eval(procDig18);

proc12a18=b12+b13+b14+b15+b16+b17+b18;
resto2=(resto1*10000000*100+proc12a18*100)%97;

procJudDV=98-resto2;

if(procJudDV<10){procJudDV="0"+procJudDV;}

procJudCompl=b1/10000+b2/10000+b3/10000+b4/10000+b5/10000+b6/10000+b7/10000+"-"+procJudDV+"."+b8/1000+b9/100+b10/10+b11+"."+b12/1000000+"."+b13/100000+b14/10000+"."+b15/1000+b16/100+b17/10+b18;

procJudCompl="000000" + procJudCompl;
procJudCompl=procJudCompl.slice(procJudCompl.length-25);


Fonte: http://ghiorzi.org/DVnew.htm nesse proprio site ele forneceu um arquivo no excel, mas dá erro

Obrigado a quem conseguir

Re: MODULO 97 BASE 10 NO EXCCEL

Enviado: 28 Ago 2019 às 16:07
por babdallas
Anexa um exemplo, nem que seja fictício.

Re: MODULO 97 BASE 10 NO EXCCEL

Enviado: 28 Ago 2019 às 21:31
por Jimmy
Olá Luis

Segue planilha funcionando:
DVnew Jimmy.xlsx
Sua fórmula da célula E1, está correta. Uma alternativa seria:

=98-MOD(MOD(MOD(MOD(A1;97)&TEXTO(B1;"0000");97)&TEXTO(C1;"0000000");97)&"00";97)

Sugiro a fórmula abaixo para a célula D1, pois é mais simples e dispensa o "SE".

=SUBSTITUIR(TEXTO(A1;"0000000-") & TEXTO(E1;"00¨") & TEXTO(B1;"0000¨") & TEXTO(C1;"0¨00¨0000");"¨";".")

Testei comparando com os resultados dados pelo site http://ghiorzi.org/DVnew.htm#f que calcula online.

MODULO 97 BASE 10 NO EXCCEL

Enviado: 29 Ago 2019 às 08:04
por luiseugenio
Muito obrigado!!!!!!