lunes, 12 de junio de 2023

Procedimiento que valida CUIL/CUIT

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.

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).

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

Qué es un Queue!? ... en Clarion

Publicado por  EMoreno  el 11/01/2006 - LWP Hola que tal. Una QUEUE es una estructura en memoria. Puede ser de un campo hasta "n...