FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Cita:
Código:
/// <summary> /// Obtiene la cadena para el código QR /// </summary> /// <param name="xmlFile">Fichero XML del que obtener info: Fichero Ticket-BAI</param> /// <param name="serverConsulta">la parte fija de conexión al servidor, según la Diputación</param> /// <param name="encoded">Codificamos o no?</param> /// <param name="tBaiId">Opcional. Podemos pasar el identificador TBAI. Si no, lo obtiene del XML Ticket-BAI</param> /// <returns></returns> public static string GetQRCodeString(string xmlFile, string serverConsulta, bool encoded, string tBaiId="") { try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFile); if (tBaiId == string.Empty) { tBaiId = GetTBaiId(xmlFile); } if (encoded) { tBaiId = GetURLEncodedString(tBaiId); } string result = serverConsulta; result += @"?id=" + tBaiId; result += @"&s=" + xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/SerieFactura"); result += @"&nf=" + xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/NumFactura"); result += @"&i=" + xmlDoc.DocumentElement.GetValue("//Factura/DatosFactura/ImporteTotalFactura"); result += @"&cr=" + GetCrc8(result); return result; } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return null; } } /// <summary> /// Obtiene identificador TBAI /// </summary> /// <param name="xmlFile">Fichero Ticket-BAI de donde sacar la info para obtener el identificar</param> /// <returns>Cadena con el identificador</returns> public static string GetTBaiId(string xmlFile) { try { string result; string separador = "-"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFile); string nif = xmlDoc.DocumentElement.GetValue("//Sujetos/Emisor/NIF").PadLeft(9, '0'); //9 NIF Emisor string fechaExpedicion = xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/FechaExpedicionFactura"); //Fecha Formato dd-mm-yyyy DateTime parsedDate; DateTime.TryParseExact(fechaExpedicion, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate); fechaExpedicion = parsedDate.ToString("ddMMyy"); string signatureValue = GetSignatureValue(xmlDoc, 13); result = "TBAI" + separador; result += nif + separador; result += fechaExpedicion + separador; result += signatureValue + separador; result += GetCrc8(result); return result; } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return null; } } /// <summary> /// Codifica una cadena para dar formato URI /// </summary> /// <param name="inputString">La cadena a codificar</param> /// <returns>La cadena codificada</returns> private static string GetURLEncodedString(string inputString) { string result = Uri.EscapeDataString(inputString); return result; } |
#2
|
|||
|
|||
Consulta función GetCrc8
Hola, unomasmas
Igual te sorprende una respuesta a tu post 4 años después de publicarlo, pero estoy con un programa de TicketBai que no consigo rematar. Tu código me puede ser útil, pero me falta el punto más importante para mí código: ¿Cuál es la implementación para tu función "GetCrc8"? Estoy creando links de QR con Batuz, Bizkaia, y me falla siempre el código CRC. He probado varias funciones. El algoritmo de la documentación está en java. He hecho "mi versión" del mismo, pero los códigos CRC siguen siendo incorrectos. Un saludo Cita:
|
#3
|
|||
|
|||
Cita:
No viene directamente a mí la pregunta pero yo también lo tengo hecho en C#, así que tal vez te pueda echar una mano aunque a mi función no la he llamado "GetCrc8". Te paso la clase completa:
Última edición por Casimiro Notevi fecha: 24-11-2023 a las 20:20:28. |
#4
|
|||
|
|||
Gracias!
Pruebo con tu código.
¡Muchas gracias! |
#5
|
||||
|
||||
Al inicio de este hilo, en el mensaje 2, hay links a implementaciones de código de diferentes temas, entre ellos varias implementaciones del CRC8.
__________________
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. |
#6
|
|||
|
|||
validar xml con xsd
Hola!
He estado revisando en el hilo si alguien validaba los xml generados contra los xsd y no veo que nadie lo haga. No es buena práctica? me estoy planteando validarlos antes de enviarlos para minimizar los errores. Gracias! |
#7
|
|||
|
|||
Cita:
Yo utilizo PHP y valido en XML creado contra el XSD Código PHP:
Así que tuve que cambiar la línea de import del XSD a: Código:
<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/> Pero funciona perfecto y valida frente al XSD. Saludos |
#8
|
|||
|
|||
Cita:
Código:
private static readonly byte[] _crc8Table = new byte[] { (byte) 0x00, (byte) 0x07, (byte) 0x0E, (byte) 0x09, (byte) 0x1C, (byte) 0x1B, (byte) 0x12, (byte) 0x15, (byte) 0x38, (byte) 0x3F, (byte) 0x36, (byte) 0x31, (byte) 0x24, (byte) 0x23, (byte) 0x2A, (byte) 0x2D, (byte) 0x70, (byte) 0x77, (byte) 0x7E, (byte) 0x79, (byte) 0x6C, (byte) 0x6B, (byte) 0x62, (byte) 0x65, (byte) 0x48, (byte) 0x4F, (byte) 0x46, (byte) 0x41, (byte) 0x54, (byte) 0x53, (byte) 0x5A, (byte) 0x5D, (byte) 0xE0, (byte) 0xE7, (byte) 0xEE, (byte) 0xE9, (byte) 0xFC, (byte) 0xFB, (byte) 0xF2, (byte) 0xF5, (byte) 0xD8, (byte) 0xDF, (byte) 0xD6, (byte) 0xD1, (byte) 0xC4, (byte) 0xC3, (byte) 0xCA, (byte) 0xCD, (byte) 0x90, (byte) 0x97, (byte) 0x9E, (byte) 0x99, (byte) 0x8C, (byte) 0x8B, (byte) 0x82, (byte) 0x85, (byte) 0xA8, (byte) 0xAF, (byte) 0xA6, (byte) 0xA1, (byte) 0xB4, (byte) 0xB3, (byte) 0xBA, (byte) 0xBD, (byte) 0xC7, (byte) 0xC0, (byte) 0xC9, (byte) 0xCE, (byte) 0xDB, (byte) 0xDC, (byte) 0xD5, (byte) 0xD2, (byte) 0xFF, (byte) 0xF8, (byte) 0xF1, (byte) 0xF6, (byte) 0xE3, (byte) 0xE4, (byte) 0xED, (byte) 0xEA, (byte) 0xB7, (byte) 0xB0, (byte) 0xB9, (byte) 0xBE, (byte) 0xAB, (byte) 0xAC, (byte) 0xA5, (byte) 0xA2, (byte) 0x8F, (byte) 0x88, (byte) 0x81, (byte) 0x86, (byte) 0x93, (byte) 0x94, (byte) 0x9D, (byte) 0x9A, (byte) 0x27, (byte) 0x20, (byte) 0x29, (byte) 0x2E, (byte) 0x3B, (byte) 0x3C, (byte) 0x35, (byte) 0x32, (byte) 0x1F, (byte) 0x18, (byte) 0x11, (byte) 0x16, (byte) 0x03, (byte) 0x04, (byte) 0x0D, (byte) 0x0A, (byte) 0x57, (byte) 0x50, (byte) 0x59, (byte) 0x5E, (byte) 0x4B, (byte) 0x4C, (byte) 0x45, (byte) 0x42, (byte) 0x6F, (byte) 0x68, (byte) 0x61, (byte) 0x66, (byte) 0x73, (byte) 0x74, (byte) 0x7D, (byte) 0x7A, (byte) 0x89, (byte) 0x8E, (byte) 0x87, (byte) 0x80, (byte) 0x95, (byte) 0x92, (byte) 0x9B, (byte) 0x9C, (byte) 0xB1, (byte) 0xB6, (byte) 0xBF, (byte) 0xB8, (byte) 0xAD, (byte) 0xAA, (byte) 0xA3, (byte) 0xA4, (byte) 0xF9, (byte) 0xFE, (byte) 0xF7, (byte) 0xF0, (byte) 0xE5, (byte) 0xE2, (byte) 0xEB, (byte) 0xEC, (byte) 0xC1, (byte) 0xC6, (byte) 0xCF, (byte) 0xC8, (byte) 0xDD, (byte) 0xDA, (byte) 0xD3, (byte) 0xD4, (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x60, (byte) 0x75, (byte) 0x72, (byte) 0x7B, (byte) 0x7C, (byte) 0x51, (byte) 0x56, (byte) 0x5F, (byte) 0x58, (byte) 0x4D, (byte) 0x4A, (byte) 0x43, (byte) 0x44, (byte) 0x19, (byte) 0x1E, (byte) 0x17, (byte) 0x10, (byte) 0x05, (byte) 0x02, (byte) 0x0B, (byte) 0x0C, (byte) 0x21, (byte) 0x26, (byte) 0x2F, (byte) 0x28, (byte) 0x3D, (byte) 0x3A, (byte) 0x33, (byte) 0x34, (byte) 0x4E, (byte) 0x49, (byte) 0x40, (byte) 0x47, (byte) 0x52, (byte) 0x55, (byte) 0x5C, (byte) 0x5B, (byte) 0x76, (byte) 0x71, (byte) 0x78, (byte) 0x7F, (byte) 0x6A, (byte) 0x6D, (byte) 0x64, (byte) 0x63, (byte) 0x3E, (byte) 0x39, (byte) 0x30, (byte) 0x37, (byte) 0x22, (byte) 0x25, (byte) 0x2C, (byte) 0x2B, (byte) 0x06, (byte) 0x01, (byte) 0x08, (byte) 0x0F, (byte) 0x1A, (byte) 0x1D, (byte) 0x14, (byte) 0x13, (byte) 0xAE, (byte) 0xA9, (byte) 0xA0, (byte) 0xA7, (byte) 0xB2, (byte) 0xB5, (byte) 0xBC, (byte) 0xBB, (byte) 0x96, (byte) 0x91, (byte) 0x98, (byte) 0x9F, (byte) 0x8A, (byte) 0x8D, (byte) 0x84, (byte) 0x83, (byte) 0xDE, (byte) 0xD9, (byte) 0xD0, (byte) 0xD7, (byte) 0xC2, (byte) 0xC5, (byte) 0xCC, (byte) 0xCB, (byte) 0xE6, (byte) 0xE1, (byte) 0xE8, (byte) 0xEF, (byte) 0xFA, (byte) 0xFD, (byte) 0xF4, (byte) 0xF3 }; /// <summary> /// Calculate the CRC value with data from input string. /// </summary> /// <param name="input">input string</param> /// <returns>The calculated CRC value. Left padding with zeros</returns> private string GetCrc8(string input) { try { byte[] data = System.Text.Encoding.UTF8.GetBytes(input); int len = data.Length; byte crc = 0; for (int i = 0; i < len; i++) crc = _crc8Table[(crc ^ data[i]) & 0xff]; long a = (crc & 0xFFL); return a.ToString("D3"); } catch (System.Exception ex) { MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); return null; } } |
#9
|
|||
|
|||
Hola,
Hemos recibido email, de TicketBAI de Gipuzkoa, de aviso de cambios de la estructura de los XML a partir del 1 de enero de 2024. Se acompaña de los nuevos XSD. No puedo subir el documento porque el foro no me permite ese tamaño de fichero. Si el administrador puede subirlo, se agradece. Saludos |
#10
|
||||
|
||||
Cita:
Creo que las modificaciones de las que habla, son la que ya han comentado las otras administraciones. De todas formas, pone que en "breve se publicarán" los esquemas. Yo los descargué ayer y siguen estando en la web los de la v.1.2.1 . Si disponéis de los nuevos de la versión 1.2.2, dímelo y me los envías por privado y los subo a la web. Me corrijo yo mismo. En la web de Guipuzcoa y de Álava está la v.1.2.1, pero en la de Vizcaya ya está la v.1.2.2 (alta / anulación) Los subo al FTP y modifico el mensaje #1 del hilo.
__________________
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: 05-12-2023 a las 11:56:23. |
#11
|
|||
|
|||
Hola,
Os paso los nuevos XSD de la versión 1.2.2 enviados por Gipuzkoa. Saludos |
#12
|
||||
|
||||
Gracias.
Los subo por separado y actualizo el primer mensaje, porque los de TicketBAI deberían ser iguales para las 3 administraciones, OSATU y ZUZENDU sólo para Guipuzcoa.
__________________
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. |
|
|
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 | 3559 | Hace 5 Horas 20:02:30 |
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 |
|