En este ejemplo mostrare un procedimiento que utilizo hace tiempo para validad una CUIT/CUIL;
el mismo controla que la clave ingresada sea válida. Y retorna un valor numérico que de acuerdo al mismo podemos exteriorizar mensajes al usuario desde un Web Panel si hay o no un error en la carga.
el mismo controla que la clave ingresada sea válida. Y retorna un valor numérico que de acuerdo al mismo podemos exteriorizar mensajes al usuario desde un Web Panel si hay o no un error en la carga.
Lo valores que retorna:
0 - La clave es correcta
1 - La clave es incorrecta
2 - El largo de la clave no corresponde.
Se reciben 2 parámetros:
Rules:
parm(in:&Numero ,out:&Retorno);
&Numero:de tipo dato Character (11).
&Retorno: de tipo de dato Number (1).
&Retorno: de tipo de dato Number (1).
Surce:
&Acum: (Acumulador) de tipo de dato Number (5).
&Resto: de tipo de dato Number (2)
&Operador: de tipo de datos Number (1), Dimensions "Vector", Rows "10"
&Digito: de tipo de datos Number (1)
&Contador: de tipo de datos Number (2)
A continuación el código completo del Procedimiento (no voy a ponerle nombre eso queda a criterio).
&Acum = 0
&Resto = 0
if(&Numero.Length() = 11)
&Operador(1) = 5
&Operador(2) = 4
&Operador(3) = 3
&Operador(4) = 2
&Operador(5) = 7
&Operador(6) = 6
&Operador(7) = 5
&Operador(8) = 4
&Operador(9) = 3
&Operador(10) = 2
&Digito = val(&Numero.Substring(11, 1))
&Contador = 1
Do while &Contador < 11
&Acum = &Acum + val(&Numero.Substring(&Contador, 1)) * &Operador(&Contador)
&Contador = &Contador + 1
Enddo
&Resto = &Acum - (int(&Acum / 11) * 11)
If (&Resto = 0)
&Resto = 11
Endif
If ((11-&Resto) = &Digito)
&Retorno = 0 // Ok
else
&Retorno = 1 // CUIL incorrecto
Endif
else
&Retorno = 2 // Largo CUIL incorrecto
endif
Espero sirva el ejemplo yo le vengo usando hace tiempo en varias aplicaciones. Como siempre digo se puede mejorar; se aceptan todo tipo de criticas siempre y cuando sean constructivas.
No hay comentarios:
Publicar un comentario