AYUDA Validacion LRC para datafono

AYUDA Validacion LRC para datafono

Postby russimicro » Sat Mar 30, 2024 6:03 pm

Buena tarde...

El proveedor del datafono solicita que se valide la sarta generada para enviar datos al datafono ; (LRC)
para lo cual envía 2 rutinas ( vb y c++ ) , como se muestra abajo ...

Se implemento con un método del foro de fivewin... pero obtengo valores diferentes en algunos casos...
La ayuda es validar si el método fivewin hace la misma tarea que hacen los métodos de vb y c++ del proveedor

Gracias
JONSSON RUSSI
Colombia


// vb

Párametro de entrada (s): cadena en valores hexadecimales. Ej: 02006236303030303030303030313030302020301C
'Retorna el LRC en valor Hexadecimal. Ej. 5D

Private Function CheckLCR(ByVal s As String) As String
Dim checksum As Integer = 0 'Este valor lo reemplazé por 2 y todo salió de maravillas.

For Each c As Char In GetStringFromHex(s)
checksum = checksum Xor Convert.ToByte(c)
Nextini

Return checksum.ToString("X2")
End Function

Private Function GetStringFromHex(ByVal s As String) As String
Dim result As String = Nothing
Dim s2 As String = s.Replace(" ", Nothing)
For i As Integer = 0 To s2.Length - 1 Step 2
result += Convert.ToChar(Integer.Parse(s2.Substring(i, 2),
System.Globalization.NumberStyles.HexNumber))
Next
Return result

End Function

// c++
int calcularLRC(unsigned char *pi_sTrama, int pi_iLongitud) {
int vl_iLRC, i;

vl_iLRC = (int) pi_sTrama[0];
for(i = 1; i < pi_iLongitud; i++ ) {
vl_iLRC = vl_iLRC ^ pi_sTrama[i];
}
return(vl_iLRC);
};

// SEGUN FORO DE FIVEWIN
function LRC( cText )

local nCheckSum := 0
local n

for n = 1 to Len( cText )
nCheckSum = nXor( nCheckSum, Asc( SubStr( cText, n, 1 ) ) )
next

return (nCheckSum)

// valores esperados vs obtenidos con metodo fivewin LRC() // valor esperado ... valor obtenido

alerta( NumToHex( LRC("07"))) // 24 .. 7

alerta( NumToHex( LRC("01501T050178174001102") ) ) //5A .. OK

alerta( NumToHex( LRC("03000000001000T050133337817418507328348732099999999999999912345678901100"))) // 6C .. OK

alerta( NumToHex( LRC("08250T050178174102238007200"))) // 71 ... 5D

alerta( NumToHex( LRC("05301786635710000") ) ) // 14 ..38

alerta( NumToHex( LRC("13501T05017817400110"))) // 47 ..6B

alerta( NumToHex( LRC("13501T0501781740011000000000000"))) //77 .. 5B

alerta( NumToHex( LRC("02T0501000157781741100"))) // 40 .. 6C


alerta( NumToHex( LRC("00838447000000020000000024838446000RAF85151209151600VENCIDO05/11/2015010829778CALLE22No.21-2200000000000000000000000000" ))) //63 .. OK

alerta( NumToHex( LRC("2110000137910000000A102837B1000100OSCROM0"))) // 10 .. 3C

alerta( NumToHex( LRC("00000006000000010000000000001379000031000029000RAF851512091718,00010829778,CALLE22No.21-22000000000000000000000000000000000000000000000"))) // 07 .. 7


alerta( NumToHex( LRC("0013624500000001000000000000137900000000862100000000010080237OSCROMcaja123000032000148000B0812130403181300VISAEL00A102938B39734005581512012266458AVEAMERICAS36-3700000000000000000000000000"))) // 13 ..33

alerta( NumToHex( LRC("06,001000CRT050178174110"))) // 67 .. OK
russimicro
 
Posts: 261
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: AYUDA Validacion LRC para datafono

Postby Antonio Linares » Sat Mar 30, 2024 10:19 pm

Aqui tienes la función usando el código que proporciona el proveedor y parece funcionar como el de Harbour:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

    MsgInfo( NumToHex( LRC( "06,001000CRT050178174110" ) ) )

return nil

#pragma BEGINDUMP

#include <hbapi.h>

int calcularLRC(unsigned char *pi_sTrama, int pi_iLongitud)
{
   int vl_iLRC, i;

   vl_iLRC = (int) pi_sTrama[0];
   for(i = 1; i < pi_iLongitud; i++ )
      vl_iLRC = vl_iLRC ^ pi_sTrama[i];

   return(vl_iLRC);
}

HB_FUNC( LRC )
{
   hb_retnl( calcularLRC( ( unsigned char * ) hb_parc( 1 ), hb_parclen( 1 ) ) );
}

#pragma ENDDUMP  
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42117
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: AYUDA Validacion LRC para datafono

Postby russimicro » Sun Mar 31, 2024 12:24 am

Antonio... buena noche.

Funciono ... Muchas gracias

Jonsson Russi
russimicro
 
Posts: 261
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 71 guests