Especificación técnica

Código QR VeriFactu: especificación oficial y cómo implementarlo

Especificación técnica completa del QR obligatorio en cada factura desde 2027. ISO/IEC 18004 nivel M, dimensiones 30-40 mm, URL HTTPS a sede AEAT con 4 parámetros. Endpoint, formato, posición, validación móvil y librerías open source.

El código QR de VeriFactu está regulado por el Capítulo VIII de la Orden HAC/1177/2024 (BOE 28 de octubre de 2024), que desarrolla técnicamente el artículo 7 del RD 1007/2023. No contiene datos cifrados: es una URL HTTPS apuntando a la sede de la AEAT con cuatro parámetros (NIF, número de serie, fecha e importe). Codificación ISO/IEC 18004 nivel M, dimensiones 30 × 30 mm a 40 × 40 mm, posición al inicio de la factura, obligatorio en todas las facturas emitidas por un SIF desde 2027.

— Formato y estructura

Qué contiene exactamente el QR

El QR de VeriFactu no es un dibujo decorativo: codifica una URL HTTPS real que apunta al servicio de cotejo de la AEAT, con cuatro parámetros fijos en la cadena de consulta que identifican de forma única cada factura emitida. Así queda la estructura completa, con un ejemplo real:

https://www2.agenciatributaria.es/wlpl/TIKE-CONT/ValidarQR?nif=89890001K&numserie=12345678/G33&fecha=01-01-2024&importe=241.4

Los cuatro parámetros obligatorios:

  • nif — NIF del emisor de la factura.
  • numserie — Número y serie de factura (puede contener barras y caracteres alfanuméricos).
  • fecha — Fecha de expedición en formato dd-mm-yyyy.
  • importe — Importe total con punto decimal. Hasta 12 enteros + 2 decimales.

Para entorno de pruebas (preproducción AEAT), el endpoint cambia a:

https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?...

Fuentes: AEAT — Características QR, Orden HAC/1177/2024.

— Dimensiones y posición

Especificaciones físicas en la factura

La AEAT no deja el tamaño ni la posición a criterio libre: fija un estándar de código, un margen mínimo para que el lector no falle y una zona de la factura donde tiene que aparecer siempre. Esto es lo que exige la especificación técnica.

AtributoValor
EstándarISO/IEC 18004
Nivel de corrección de erroresM (Medium, ~15 %)
Tamaño impreso30 × 30 mm a 40 × 40 mm
Margen blanco mínimo (quiet zone)2 mm cada lado
Margen recomendado6 mm cada lado
Posición en factura verticalArriba, centrado o superior izquierdo
Posición en factura horizontalIzquierda
Posición en facturas multipáginaSólo en la primera página
Endpoint producciónwww2.agenciatributaria.es/wlpl/TIKE-CONT/ValidarQR
Endpoint preproducciónprewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR
— Librerías open source

Implementaciones verificadas en GitHub

Si lo que necesitas es solo generar el código a partir de la URL ya compuesta, sin más lógica de facturación detrás, estas librerías de QR raw resuelven la parte gráfica en varios lenguajes de programación distintos, sin coste de licencia:

  • Multi-lenguaje: nayuki/QR-Code-generator (Python, JavaScript, Java, C++, Rust).
  • Python: qrcode en PyPI con backend Pillow.
  • JavaScript: qrcode en npm, kjur/jsqrcode.

Para el ciclo completo VeriFactu (registros + envío AEAT + QR):

— FAQ

Preguntas frecuentes sobre el código QR de VeriFactu

Estructura exacta de la URL, formato del código, dimensiones físicas mínimas, cómo se valida contra el servicio de la AEAT y los errores más comunes que vemos al implementar el QR en un sistema de facturación que todavía no lo tenía integrado.

Ver todas las preguntas
¿Qué contiene el código QR de VeriFactu?+
No contiene datos cifrados ni un JSON o XML. Es una URL HTTPS apuntando a la sede de la AEAT con cuatro parámetros en query string: NIF del emisor (nif), número y serie de factura (numserie), fecha en formato dd-mm-yyyy (fecha) e importe total (importe, decimal con punto). Ejemplo: https://www2.agenciatributaria.es/wlpl/TIKE-CONT/ValidarQR?nif=89890001K&numserie=12345678/G33&fecha=01-01-2024&importe=241.4. Está regulado por el Capítulo VIII de la Orden HAC/1177/2024 y el art. 7 del RD 1007/2023.
¿Qué tamaño debe tener el QR en la factura?+
Entre 30 × 30 mm y 40 × 40 mm en la factura impresa. Debe respetar un margen blanco (quiet zone) mínimo de 2 mm en cada lado, recomendado 6 mm. La codificación sigue el estándar ISO/IEC 18004 con nivel de corrección de errores M (medio, ~15 %). El tamaño coincide con el de TicketBAI vasco para mantener uniformidad visual en facturas que se emitan en ambos territorios.
¿Dónde se coloca el QR en la factura?+
Al principio de la factura, antes de que empiece el contenido. En facturas verticales: arriba, centrado o superior izquierdo. En horizontales: izquierda. Si hay obstáculos que hagan inconveniente esa ubicación, puede adoptarse otra siempre que sea claramente visible y se distinga del resto de elementos. Para facturas multipágina: sólo en la primera.
¿Es opcional el QR?+
No. Es obligatorio para todas las facturas (completas y simplificadas) emitidas por un Sistema Informático de Facturación (SIF) desde el 1 de enero o 1 de julio de 2027 según el tipo de contribuyente (calendario RD-ley 15/2025). Aplica también si la empresa elige modalidad No-VERI*FACTU.
¿Cómo se valida desde un móvil?+
El lector QR decodifica la URL HTTPS y abre el navegador. La sede AEAT consulta su base de datos: en modalidad VERI*FACTU devuelve confirmación de que la factura consta en AEAT con NIF emisor, serie/número, fecha e importe. En modalidad No-VERI*FACTU el receptor puede pulsar voluntariamente para enviar la información a la AEAT (útil para reportar facturas sospechosas).
¿Necesito librerías específicas AEAT para generar el QR?+
No. Cualquier librería estándar que implemente ISO/IEC 18004 con nivel M sirve. La única condición es que la URL codificada apunte a sede AEAT con los 4 parámetros correctos. Librerías open source válidas: nayuki/QR-Code-generator (multi-lenguaje), qrcode (Python con Pillow), zxing (Java/Android), kjur/jsqrcode (JavaScript). Para el ciclo completo VeriFactu: hectorsipe/aeat-verifactu, mdiago/VeriFactu (.NET), eseperio/verifactu-php.
¿Es lo mismo que el QR de TicketBAI?+
No. Comparten dimensiones físicas (30-40 mm) y estándar (ISO/IEC 18004) para uniformidad visual, pero apuntan a endpoints distintos (sede AEAT vs sede foral correspondiente) y los parámetros tienen semántica distinta. Una empresa con domicilio en País Vasco emite QR TicketBAI; una con domicilio en territorio común emite QR VeriFactu.
¿Qué pasa si el QR genera errores al imprimir?+
El nivel de corrección de errores M (~15 %) permite que el QR sea legible aunque tenga manchas o suciedad de hasta el 15 % de su superficie. Si la impresora corta el QR o lo deforma, hay que ajustar el diseño de plantilla. Los errores comunes son: margen blanco insuficiente, escala incorrecta al PDF, contraste tóner inadecuado. La AEAT no fija un nivel mínimo de calidad de impresión más allá del estándar ISO.
— Lecturas recomendadas

Profundiza en VeriFactu técnico

El QR es solo una pieza del sistema. Si estás implementando VeriFactu de verdad, te interesa también el hash y el encadenamiento entre facturas, si tu software actual ya está homologado y cómo lo resolvemos nosotros en el módulo de ERPNext.

Las normas, en su fuente

Lo que se afirma aquí sobre la normativa sale de estos textos oficiales, no de un resumen de terceros ni de un blog citando a otro blog. Enlazamos siempre la versión consolidada, así que cuando la norma se modifica el enlace sigue llevando a la que está en vigor y no a una redacción que ya no aplica.

Empezar · Respuesta en 24h

¿Necesitas implementar el QR en tu software?

Si fabricas software de facturación o has heredado un sistema sin QR conforme, podemos ayudarte a desarrollarlo desde cero, preparar la declaración responsable y conectarlo al entorno de pruebas de la AEAT antes de pasar a producción de verdad final.

Demo personalizada
Sin compromiso
Equipo en España