Estou com uma function que faz o cálculo do dígito verificador no modelo MOD 10.
O que está ocorrendo de erro? Meu banco possui um nr de registro que contém 4 caracteres (6567) e também 5 caracteres (14639) no mesmo campo. Eu preciso criar o digito verificador destes números, só que não está calculando corretamente. Fiz uma conferência, com 4 caracteres eles está calculando corretamente, mas quando é cinco não está. Abaixo a function:
CREATE OR REPLACE FUNCTION "MOD10" ( pOrgCalculo IN VARCHAR2) return number
as
VSoma Number (04) ;
VOrgCalculo Varchar2(20) ;
VDgMultiplicador Varchar2(02) ;
vTamOrgCalc Number(2);
vDGNosso_Numero Number (1) ;
begin
vDGNosso_numero:=9;
vOrgCalculo:=pOrgCalculo;
vTamOrgCalc:=Length(pOrgCalculo);
-- CALCULANDO O DIGITO VERIFICADOR
VSoma := 0 ;
For X In 1..vTamOrgCalc Loop
If Mod(X,2)=0 Then
If To_Number(Substr( VOrgCalculo , X , 1 )) * 2 >= 10 Then
VDgMultiplicador := To_Number(Substr(VOrgCalculo ,X,1))*2;
VSoma := VSoma + To_Number(Substr(VDgMultiplicador,1,1)) ;
VSoma := VSoma + To_Number(Substr(VDgMultiplicador,2,1)) ;
Else
VSoma := VSoma + ( To_Number ( Substr ( VOrgCalculo , X , 1 )) *2 ) ;
End If ;
Else
VSoma := VSoma + ( To_Number ( Substr ( VOrgCalculo , X , 1 )) *1 ) ;
End If ;
End Loop ;
IF Mod ( VSoma ,10)=0 Then
vDGNosso_Numero:=0 ;
Else
vDGNosso_Numero:=TO_NUMBER(10-Mod(VSoma,10)) ;
End If ;
Return (vDGNosso_Numero);
End;
Agradeço!