FoxPro/Visual FoxPro - digito verificador modulo 11

 
Vista:
Imágen de perfil de Elias

digito verificador modulo 11

Publicado por Elias (79 intervenciones) el 09/09/2019 20:39:30
Estoy haciendo una rutina para calcular el digito verificado del RUC en Paraguay.

Utilizo el modulo 11

y la rutina es la que encontre en internet, es decir cada numero del documento, empezando por la derecha lo voy multiplicando por 2,3,4,5,6,7 sucesivamente y luego, en caso de hacer mas numero los factores se vuelven a repetir.
Sumo la multiplicacion de cada numero con su factor corresapondiente y de eso obtengo el resto.

este residuo lo resto de 11 y el numero que obtengo es el DV.

Ej. 3 8 1 7 6 4
7 6 5 4 3 2
esto da

21 48 5 28 18 8 y la suma es igual a 128

el resto de este numero dividido 11 da 7 que restado de 11 da 4, con lo cual su DV es 4

el RUC final es 381764-4

El problema que se me presenta es cuando el numero es cuestion tiene mas 6 cifras

Ej. 80010556

siguiendo con el procedimiento tengo

8 0 0 1 0 5 5 6
3 2 7 6 5 4 3 2

aplicando el mismo procedimiento no me da el DV

alguien me puede ayudar ?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Diego
Val: 11
Ha disminuido su posición en 7 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

digito verificador modulo 11

Publicado por Diego (7 intervenciones) el 18/04/2023 16:56:07
FUNCTION _Calculo_digver(p_numero,p_basemax)

v_total=0
v_resto=0
k=0
v_numero_aux=0
v_numero_al=""
v_caracter=""
v_digito=0
for i=1 to len(p_numero)
v_caracter = uppe(subs(p_numero,i,1))
if asc(v_caracter) > 47 and asc(v_caracter) < 58
v_numero_al = v_numero_al + v_caracter
else
* brow
v_numero_al = v_numero_al + ALLTRIM(STR(asc(v_caracter)))
endif
ENDFOR
** Calcula el digito verificador
k=2
v_total=0
for i=len(p_numero) to 1 step -1
if k > p_basemax
k = 2
endif
v_numero_aux = val(subs(p_numero,i,1))
v_total = v_total + (v_numero_aux * k)
k = k + 1
endfor
v_resto = mod(v_total,11)
if v_resto > 1
v_digito = 11 - v_resto
else
v_digito = 0
endif

RETURN INT(v_digito)

Endfunc

*--------------------------------------------------------------------------
* FIN Calculo_digver_ruc.prg
*--------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar