************************************************************
**FUNCION PARA CALCULAR EL LRC.
**Javier Ospina Alzate
**Fecha: 11/NOVIEMBRE/2015
**Descripcion:
**el lrc es un digito de verificacion que se debe generar
**segun la trama que se envia, este digito es calculado según
**un algoritmo para evitar que la información sea de alguna
**manera modificada por algun programa sospechoso.
************************************************************
FUNCTION CALCULAR_LRC(Cadena)
*inicializa las variables lungitud y de incremento.
Store 0 TO Longitud,i
*se calcula el valor inicial para el iLRC
*1. se realiza un substring (SUBSTR) de la cadena con inicio y fin.
*2. del caracter que se extrajo se aplica la funcion(ASC) que devuelve el numero en codigo ASCII
*3. luego se aplica una funcion logica XOR y este es el valor que se lleva inicialmente a iLRC
iLRC = BITXOR(ASC(SUBSTR(Cadena, 1, 1)),ASC(SUBSTR(Cadena, 2, 1)))
*se asigna la longitud de la trama
Longitud = Len(Cadena)
*se realiza un ciclo comenzando en la posicion 3 hata la longitud total de la trama o cadena enviada.
For i = 3 To Longitud
*se halla el codigo ASCII para la posicion segun el ciclo
valor=ASC(SUBSTR(Cadena, i, 1))
*se aplica funcion logica XOR para asignar el valor al iLRC
iLRC = BITXOR(iLRC,valor)
Next i
SET STEP ON
*terminado el ciclo se debe invocar la funcion que me permite convertir un valor en hexadecimal.
*se envia el valor final para iLRC se convierte a hexadecimal y se asocia de nuevo a la variable iLRC
iLRC =hex(iLRC)
*convertimos el dato en caracter para poder concatenarlo en la trama o cadena y se quitan espacios en blanco.
iLRC =ALLTRIM(STR(iLRC))
*se valida si la longitud del dato iLRC es uno se debe concatenar al inicio un cero
If Len(iLRC) = 1 Then
iLRC = "0" + iLRC
ENDIF
*finalmente se envia el codigo iLRC a la trama o cadena.
Return iLRC
ENDFUNC
************************************************************
************************************************************
**FUNCION PARA CONVERTIR UN DECIMAL A HEXADECIMAL.
**Javier Ospina Alzate
**Fecha: 11/NOVIEMBRE/2015
**Descripcion:
**Terminada la logica que me calcula el numero iLRC este
**numero es llevado a hexadecimal por medio de esta funcion.
************************************************************
function hex
*recibe el parametro numero iLRC.
parameters X
*inicializamos variables
i=0
n=0
*se realiza un ciclo mientras el parametro sea mayor a cero.
DO while x>0
r=MOD(x,16)
x=INT(x/16)
n=n+r*(10^i)
i=i+1
ENDDO
return n
************************************************************