Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-12-2019
bilbur bilbur is offline
Miembro
 
Registrado: dic 2019
Posts: 61
Poder: 6
bilbur Va por buen camino
CRC8 conforme a las nuevas especificaciones técnicas de TBAI

Para su implementación en PHP


la función ( algoritmo o clase) para calcular el código CRC8 de comprobación está publicado en JAVA en la nueva documentación técnica de TBAI


Al intentar adaptarlo a PHP, no me devuelve los mismos códigos que en los ejemplos.


Tras investigar (google, foros PHP, etc) tengo un algoritmo que parace que funciona:


Sería este:


function crc8($data)
{

$crc8_table = array(
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3);

$data = unpack("C*",$data);
$crc = 0x0;
foreach ($data as $d)
$crc = $crc8_table[$d ^ $crc];
$crc = $crc ^ 0x0;
return str_pad(($crc & 0xff),3,"0",STR_PAD_LEFT);
}



Invocado con los dos ejemplos

$TBAIID ='TBAI-00000006Y-251019-btFpwP8dcLGAF-';
$TBAIID = utf8_encode($TBAIID);
echo $TBAIID.'<br>';
echo 'debe ser 237 y es '.crc8($TBAIID).'<br>';

Resultado = 237


$TBAIID = '--batuz.eus/QRTBAI/?id=TBAI-00000006Y-251019-btFpwP8dcLGAF-237&s=T&nf=27174&i=4.70';
$TBAIID = utf8_encode($TBAIID);
echo $TBAIID.'<br>';
echo 'debe ser 007 y es '.crc8($TBAIID).'<br>';

Resultado = 007

Espero que a alguien le sirva


Un saludo
Responder Con Cita
  #2  
Antiguo 23-12-2019
Sistel Sistel is offline
Miembro
 
Registrado: nov 2019
Ubicación: Bilbao
Posts: 445
Poder: 6
Sistel Va por buen camino
Cita:
Empezado por bilbur Ver Mensaje
Para su implementación en PHP
la función ( algoritmo o clase) para calcular el código CRC8 de comprobación está publicado en JAVA en la nueva documentación técnica de TBAI
Al intentar adaptarlo a PHP, no me devuelve los mismos códigos que en los ejemplos.
Tras investigar (google, foros PHP, etc) tengo un algoritmo que parace que funciona:
Sería este:
...
¡¡¡ Genial !!!

Muchas gracias, me viene de perlas.
Responder Con Cita
  #3  
Antiguo 24-12-2019
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.130
Poder: 23
keys Va por buen camino
Hola a todos. Buscando por internet y haciendo pruebas pongo el código para Delphi. Para los dos ejemplos funciona.

Código Delphi [-]
 function crc8(Buffer:String;Polynom,Initial:Cardinal):Cardinal;
var
  i,j : Integer;
begin

 Result:=Initial;
 for i:=1 to Length(Buffer) do begin
   Result:=Result xor ord(buffer[i]);
   for j:=0 to 7 do begin
     if (Result and $80)<>0 then Result:=(Result shl 1) xor Polynom
     else Result:=Result shl 1;
     end;
   end;
 Result:=Result and $ff;
end;

 Crc8('TBAI-00000006Y-251019-btFpwP8dcLGAF-', $07, 0); = '237'
 Crc8('https://batuz.eus/QRTBAI/?id=TBAI-00000006Y-251019-btFpwP8dcLGAF-237&s=T&nf=27174&i=4.70', $07, 0); = '007'
Responder Con Cita
  #4  
Antiguo 26-12-2019
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 192
Poder: 13
elcharlie Va por buen camino
Hola a todos, pues yo también os dejo el código de la función de crc8 en delphi. He intentendo hacerlo lo más parecido al jemplo de Java. Espero que os sirva. Un saludo y Feliz Navidad.
Código Delphi [-]
const
  CRC8_Table: array[0..255] of Byte = (
    $00, $07, $0E, $09, $1C, $1B, $12, $15,
    $38, $3F, $36, $31, $24, $23, $2A, $2D,
    $70, $77, $7E, $79, $6C, $6B, $62, $65,
    $48, $4F, $46, $41, $54, $53, $5A, $5D,
    $E0, $E7, $EE, $E9, $FC, $FB, $F2, $F5,
    $D8, $DF, $D6, $D1, $C4, $C3, $CA, $CD,
    $90, $97, $9E, $99, $8C, $8B, $82, $85,
    $A8, $AF, $A6, $A1, $B4, $B3, $BA, $BD,
    $C7, $C0, $C9, $CE, $DB, $DC, $D5, $D2,
    $FF, $F8, $F1, $F6, $E3, $E4, $ED, $EA,
    $B7, $B0, $B9, $BE, $AB, $AC, $A5, $A2,
    $8F, $88, $81, $86, $93, $94, $9D, $9A,
    $27, $20, $29, $2E, $3B, $3C, $35, $32,
    $1F, $18, $11, $16, $03, $04, $0D, $0A,
    $57, $50, $59, $5E, $4B, $4C, $45, $42,
    $6F, $68, $61, $66, $73, $74, $7D, $7A,
    $89, $8E, $87, $80, $95, $92, $9B, $9C,
    $B1, $B6, $BF, $B8, $AD, $AA, $A3, $A4,
    $F9, $FE, $F7, $F0, $E5, $E2, $EB, $EC,
    $C1, $C6, $CF, $C8, $DD, $DA, $D3, $D4,
    $69, $6E, $67, $60, $75, $72, $7B, $7C,
    $51, $56, $5F, $58, $4D, $4A, $43, $44,
    $19, $1E, $17, $10, $05, $02, $0B, $0C,
    $21, $26, $2F, $28, $3D, $3A, $33, $34,
    $4E, $49, $40, $47, $52, $55, $5C, $5B,
    $76, $71, $78, $7F, $6A, $6D, $64, $63,
    $3E, $39, $30, $37, $22, $25, $2C, $2B,
    $06, $01, $08, $0F, $1A, $1D, $14, $13,
    $AE, $A9, $A0, $A7, $B2, $B5, $BC, $BB,
    $96, $91, $98, $9F, $8A, $8D, $84, $83,
    $DE, $D9, $D0, $D7, $C2, $C5, $CC, $CB,
    $E6, $E1, $E8, $EF, $FA, $FD, $F4, $F3);


function Calculate_CRC8(Cadena: String):String;
var
  data: TArray;
  len, i: Integer;
  crc: byte;
begin
  data := TEncoding.UTF8.GetBytes(Cadena);
  len := Length(data);
  crc := 0;

  for i := 0 to len-1 do
    crc := CRC8_Table[(crc xor data[i]) and $FF];

  Result := Format('%.*d', [3, (crc and $FF)]);
end;
Responder Con Cita
  #5  
Antiguo 30-12-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por keys Ver Mensaje
Hola a todos. Buscando por internet y haciendo pruebas pongo el código para Delphi. Para los dos ejemplos funciona.
Cita:
Empezado por elcharlie Ver Mensaje
Hola a todos, pues yo también os dejo el código de la función de crc8 en delphi. He intentendo hacerlo lo más parecido al jemplo de Java. Espero que os sirva. Un saludo y Feliz Navidad.


Muchas gracias a ambos.

NOTA: Actualizado el mensaje original con los links a los códigos (PHP y Delphi).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 30-12-2019 a las 15:57:41.
Responder Con Cita
  #6  
Antiguo 30-12-2019
bilbur bilbur is offline
Miembro
 
Registrado: dic 2019
Posts: 61
Poder: 6
bilbur Va por buen camino
Dispositivo de facturación

De la documentación técnica:


Dispositivo de facturación: dispositivo desde el que se accede a la aplicación de facturación, independientemente de que dicho dispositivo acceda a un servidor remoto para el funcionamiento de la aplicación. Por ejemplo: en una aplicación web, el número de serie será el del dispositivo que tiene instalado el navegador. No será, por tanto, el servidor remoto al que accede.


En mi caso la aplicación de facturación accede a un servidor remoto (mediante navegador).
Puede acceder al servidor una cantidad importante de dispositivos.

Mediante programación puedo acceder a la siguiente información del cliente que se conecta:
  • Serie del disco duro (problema, puede tener varios discos duros o particiones)
  • Serie de la BIOS (me sale una cadena en blanco, vacia)
  • Serie del procesador (parece correcto)
  • La IP del cliente (IP interna fija o IP por VPN también fija)
  • La MAC del cliente
No puedo acceder al ID de dispositivo del cliente (en win10 es algo así : 1055263D-F231-43D3-9DB4-D62D3D9629E0)


Mi idea es crear una tabla manual en el servidor con la MAC del cliente y la id de su dispositivo.


Antes de continuar me gustaría saber cómo solventáis vosotros este tema, no sea que esté haciendo el novato y exista una solución mejor.


Gracias
Responder Con Cita
  #7  
Antiguo 30-12-2019
Sistel Sistel is offline
Miembro
 
Registrado: nov 2019
Ubicación: Bilbao
Posts: 445
Poder: 6
Sistel Va por buen camino
Cita:
Empezado por bilbur Ver Mensaje
De la documentación técnica:

Dispositivo de facturación: dispositivo desde el que se accede a la aplicación de facturación, independientemente de que dicho dispositivo acceda a un servidor remoto para el funcionamiento de la aplicación. Por ejemplo: en una aplicación web, el número de serie será el del dispositivo que tiene instalado el navegador. No será, por tanto, el servidor remoto al que accede.

En mi caso la aplicación de facturación accede a un servidor remoto (mediante navegador).
Puede acceder al servidor una cantidad importante de dispositivos.

Mediante programación puedo acceder a la siguiente información del cliente que se conecta:
  • Serie del disco duro (problema, puede tener varios discos duros o particiones)
  • Serie de la BIOS (me sale una cadena en blanco, vacia)
  • Serie del procesador (parece correcto)
  • La IP del cliente (IP interna fija o IP por VPN también fija)
  • La MAC del cliente
No puedo acceder al ID de dispositivo del cliente (en win10 es algo así : 1055263D-F231-43D3-9DB4-D62D3D9629E0)

Mi idea es crear una tabla manual en el servidor con la MAC del cliente y la id de su dispositivo.

Antes de continuar me gustaría saber cómo solventáis vosotros este tema, no sea que esté haciendo el novato y exista una solución mejor.

Gracias
En mi caso, se puede acceder al programa de facturación desde cualquier ordenador, smartphone o tablet conectado a Internet que se tenga a mano.
Para acceder, se utiliza cualquier navegador web simplemente autenticándose mediante usuario y contraseña.
Y, en el caso de algunos comerciales y transportistas en movilidad, pueden utilizar un PC ajeno (por ejemplo, el ordenador del cliente al que están visitando cuando ellos tienen mala conectividad de datos desde su portátil o smartphone)
Lógicamente, no se puede instalar ningún certificado ni software en los ordenadores ajenos desde los que se accede.
Y, por tanto, no hay forma de tener un certificado de dispositivo ni de obtener desde el servidor de facturación ningún identificativo fijo de dispositivo.

Lo he consultado al buzón de TicketBAI y estoy a la espera de respuesta.

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3706 Hace 2 Semanas 09:38:43
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 19:19:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi