ValidateFin

Payment QR codes EPC & Swiss QR-bill

Build a scan-to-pay QR code for a SEPA transfer, or drop a picture of one and find out why a bank refuses it. Nothing is uploaded.

EPC069-12 v3.1Swiss QR-billQR-IBANISO 11649100% local
100% Local

What is an EPC QR code, and how does a Swiss QR-bill differ?

An EPC QR code — defined by EPC069-12 — is the "scan to pay" square printed on European invoices. Its payload is twelve lines of plain text: a BCD service tag, a version, a character set, the SCT identifier, then the beneficiary's BIC, name and IBAN, the amount in euro, a purpose code and either a structured creditor reference or an unstructured message. The whole thing is capped at 331 bytes. A Swiss QR-bill is a different standard (SIX Implementation Guidelines): its payload is 31 to 34 lines, it accepts only Swiss and Liechtenstein IBANs in Swiss francs or euro, and its defining rule is the pairing of account and reference — a QR-IBAN (an IBAN whose institution ID falls between 30000 and 31999) requires a QRR reference, while a standard IBAN forbids one and takes an ISO 11649 SCOR reference or none at all.

Código QR de transferencia SEPA (EPC069-12)

Rellene el beneficiario y obtenga el código QR «escanear para pagar» que leen las aplicaciones bancarias europeas. Todo se calcula en su navegador.

002 — el BIC solo se exige si el banco del beneficiario es un participante SEPA fuera del EEE.

Se escribe EUR seguido del valor, p. ej. EUR12.30. Entre 0,01 y 999999999,99.

Tamaño del payload: 54 / 331

Válido

Payload

BCD
002
1
SCT

ACME SA
DE71110220330123456789
EUR12.30

Puntos clave

  • El código QR EPC (EPC069-12 v3.1) es el cuadrado «escanear para pagar» de las facturas europeas. Su payload tiene 12 líneas y está limitado a 331 BYTES — no caracteres: en UTF-8 una letra acentuada cuesta dos.
  • La referencia estructurada y el concepto libre se excluyen mutuamente: un QR de pago lleva una referencia de acreedor o texto libre, nunca ambos.
  • Una factura QR suiza usa una QR-IBAN cuando el identificador de entidad (posiciones 5-9 del IBAN) está entre 30000 y 31999. Una QR-IBAN exige una referencia QRR; un IBAN normal la prohíbe y toma SCOR o NON. Cualquier combinación errónea es un pago rechazado.
  • El dígito de control de la QRR es un módulo 10 recursivo — no el módulo 97 del mundo IBAN. La referencia de acreedor RF (ISO 11649) también se comprueba.
  • Una factura suiza de exactamente 0.00 con la mención «no utilizar para el pago» es legítima: es una notificación, no una factura rota.
  • Tanto el generador como el descodificador funcionan íntegramente en su navegador — un QR de factura lleva un IBAN y nunca sale de su máquina.

Two payment QR standards, checked against the specifications that define them

The generator produces an EPC069-12 v3.1 payload and renders it at error-correction level M, as the guidelines require. It enforces what the specification actually says: the 331-byte cap is on bytes, not characters, so an accented beneficiary name costs more than its length suggests; the structured reference and the unstructured message are mutually exclusive; and the BIC is mandatory in version 001 but only conditional in version 002.

The decoder reads both standards, from a pasted payload or from a picture of the QR code itself — decoded in the browser canvas, never uploaded. For a Swiss QR-bill it performs the check the guidelines explicitly ask a decoder to make: the account/reference pairing, the recursive modulo-10 check digit of the QR reference, and the mod-97 check digits of an ISO 11649 creditor reference. It also knows that a bill of exactly 0.00 carrying a "do not use for payment" message is a legitimate notification, not a broken document.

Key takeaways

  • The EPC payload is capped at 331 BYTES of the declared character set — not 331 characters. In UTF-8, an accented letter costs two.
  • A QR-IBAN is nothing more than an IBAN whose institution ID (positions 5-9) falls in 30000-31999. It requires a QRR reference; a standard IBAN forbids one.
  • The QR reference check digit is a recursive modulo 10, not the modulo 97 of the IBAN world. The two give different answers, and only one is right.
  • A Swiss QR-bill of exactly 0.00 with a "do not use for payment" message is valid by design — a validator that enforces a 0.01 minimum rejects a document the standard itself defines.

Frequently asked questions

What is the difference between EPC QR code version 001 and 002?

Exactly one thing: whether the BIC is mandatory. In version 001 the beneficiary BIC must always be present. In version 002 it is only required when the beneficiary's payment service provider is a SEPA scheme participant outside the EEA. Nothing else about the structure changes between the two.

Why does my Swiss QR-bill get refused even though the IBAN is correct?

Almost always because the account and the reference type do not match. If the IBAN's institution identification (positions 5 to 9) falls between 30000 and 31999, it is a QR-IBAN and the reference type must be QRR. If it is any other IBAN, a QR reference is forbidden and the reference type must be SCOR (an ISO 11649 creditor reference) or NON. A QR-IBAN with SCOR, or a standard IBAN with QRR, cannot be booked.

Can an EPC QR code carry a currency other than the euro?

No. EPC069-12 defines the amount as "the amount of the SEPA Credit Transfer in euro", and there is no separate currency field. The amount is written as EUR followed by the value, between 0.01 and 999999999.99.

Is my QR code image uploaded to a server?

No. The picture is drawn to a canvas and decoded by JavaScript in your browser. That matters here more than almost anywhere else: a payment QR code contains an IBAN, an amount and often an invoice reference.