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 transferência SEPA (EPC069-12)

Preencha o beneficiário e obtenha o código QR «ler para pagar» que as aplicações bancárias europeias leem. Tudo é calculado no seu navegador.

002 — o BIC só é exigido se o banco do beneficiário for um participante SEPA fora do EEE.

Escreve-se EUR seguido do valor, p. ex. EUR12.30. Entre 0,01 e 999999999,99.

Tamanho do payload: 54 / 331

Válido

Payload

BCD
002
1
SCT

ACME SA
DE71110220330123456789
EUR12.30

Pontos-chave

  • O código QR EPC (EPC069-12 v3.1) é o quadrado «ler para pagar» das faturas europeias. O seu payload tem 12 linhas e está limitado a 331 BYTES — não caracteres: em UTF-8 uma letra acentuada custa dois.
  • Referência estruturada e comunicação livre excluem-se mutuamente: um QR de pagamento leva uma referência de credor ou texto livre, nunca ambos.
  • Uma fatura QR suíça usa uma QR-IBAN quando o identificador da instituição (posições 5-9 do IBAN) está entre 30000 e 31999. Uma QR-IBAN exige uma referência QRR; um IBAN normal proíbe-a e usa SCOR ou NON. Qualquer combinação errada é um pagamento recusado.
  • O dígito de controlo da QRR é um módulo 10 recursivo — não o módulo 97 do mundo IBAN. A referência de credor RF (ISO 11649) também é verificada.
  • Uma fatura suíça de exatamente 0.00 com a menção «não utilizar para pagamento» é legítima: é uma notificação, não uma fatura defeituosa.
  • Tanto o gerador como o descodificador funcionam inteiramente no seu navegador — um QR de fatura leva um IBAN e nunca sai da sua 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.