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% Lokal

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.

QR-Code für SEPA-Überweisung (EPC069-12)

Empfänger eintragen und den „Scan to Pay“-QR-Code erhalten, den europäische Banking-Apps lesen. Alles wird im Browser berechnet.

002 — die BIC ist nur nötig, wenn die Bank des Empfängers ein SEPA-Teilnehmer außerhalb des EWR ist.

Als EUR gefolgt vom Wert, z. B. EUR12.30. Zwischen 0,01 und 999999999,99.

Größe des Payloads: 54 / 331

Gültig

Payload

BCD
002
1
SCT

ACME SA
DE71110220330123456789
EUR12.30

Kernpunkte

  • Der EPC-QR-Code (EPC069-12 v3.1) ist das „Scan to Pay“-Quadrat auf europäischen Rechnungen. Sein Payload hat 12 Zeilen und ist auf 331 BYTES begrenzt — nicht Zeichen: in UTF-8 kostet ein Buchstabe mit Umlaut zwei.
  • Strukturierte Referenz und freier Verwendungszweck schließen sich aus: ein Zahlungs-QR trägt eine Gläubigerreferenz oder freien Text, nie beides.
  • Eine Schweizer QR-Rechnung nutzt eine QR-IBAN, wenn die Instituts-ID (Positionen 5-9 der IBAN) zwischen 30000 und 31999 liegt. Eine QR-IBAN verlangt eine QRR-Referenz; eine normale IBAN verbietet sie und nimmt SCOR oder NON. Jede falsche Kombination ist eine abgelehnte Zahlung.
  • Die Prüfziffer der QRR ist ein rekursives Modulo 10 — nicht das Modulo 97 der IBAN-Welt. Die RF-Gläubigerreferenz (ISO 11649) wird ebenfalls geprüft.
  • Eine Schweizer Rechnung über genau 0.00 mit dem Hinweis „nicht zur Zahlung verwenden“ ist legitim: sie ist eine Mitteilung, keine defekte Rechnung.
  • Generator und Dekoder laufen vollständig im Browser — ein Rechnungs-QR trägt eine IBAN und verlässt Ihren Rechner nie.

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.