![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
Cita:
Muchas gracias, me viene de perlas. |
#3
|
||||
|
||||
Hola a todos. Buscando por internet y haciendo pruebas pongo el código para Delphi. Para los dos ejemplos funciona.
|
#4
|
||||
|
||||
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.
|
#5
|
||||
|
||||
Cita:
Cita:
![]() ![]() ![]() ![]() ![]() 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. |
#6
|
|||
|
|||
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:
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 |
#7
|
|||
|
|||
Cita:
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 |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
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 |
![]() |
|