EPC QR Code Generator

Create an EPC QR code, also called a SEPA QR code, for a credit transfer under the European Payments Council guideline EPC069-12. The tool opens on a sample payment; replace it with your own and the conformance report under the fields checks the code rule by rule.

Valid IBAN, Austria, Erste Bank

Sample

Sample payment. The IBAN, the name, the amount and the reference are placeholders that show how the tool works. Replace them with your own; the downloads stay locked until the IBAN, the name and the reference are yours.

EPC069-12 payment QR89 / 331 bytes
EPC payment QR code. Pay Example Studio GmbH at AT23 2011 1002 3457 3201, EUR 120.00, reference Invoice 2026-014

Scan with a SEPA banking app to pre-fill this transfer.

AT23 2011 1002 3457 3201

Erste Bank · GIBAATWW

Generated in your browser. Your IBAN is never uploaded.SecurityMethodology

This is still sample data. Replace the IBAN and the name with your own.

Payment details

The beneficiary name is required for a payment QR. Everything else is optional.

Taken from the IBAN: GIBAATWW. Type one to override it.

EUR
Reference

Element 11, up to 140 characters.

Element 9, up to four letters or digits, for example SUPP.

Element 12, up to 70 characters. The standard calls it beneficiary to originator information.

Version

Version 002 lets the BIC stay empty when every bank involved is in the EEA.

EPC069-12 conformance

15 of 15 rules hold. The code is read back with the same parser as our payment QR decoder, so this checks what was written into the code, not what the form holds.

RuleThis codeResult
Service tag is BCDBCDHolds
Version is 001 or 002002Holds
Character set is 1 to 81 (UTF-8)Holds
Identification is SCTSCTHolds
BIC well formed, and present where requiredGIBAATWWHolds
Beneficiary name present, at most 70 characters19 charactersHolds
IBAN presentAT232011100234573201Holds
Amount in euro, 0.01 to 999,999,999.99EUR120Holds
Purpose at most 4 charactersnot setHolds
Creditor reference or free text, not bothfree textHolds
Note to the payer at most 70 charactersnot setHolds
No separator after the last populated elementnoneHolds
Payload at most 331 bytes89 bytesHolds
Error correction level MMHolds
QR symbol version at most 136Holds

A code that passes every rule is well formed. Whether a given banking app reads it is that bank's decision; the standard leaves support to each bank.

Printing in Austria: PSA Payment Services Austria asks for a module of 0.381 to 0.508 mm, which for this code of 49 modules, quiet zone included, means 18.7 to 24.9 mm wide. The same guidance prints the code inside a frame carrying the words "Zahlen mit Code".

Appearance and output

Colour and file size.

Code colour
Background
PNG size

87 mm at 300 dpi

Error correction MQuiet zone 4 modulesModule floor 0.4 mm
Fixed by the standard, and why there are only three settings

Error correction M and the four module quiet zone are fixed by EPC069-12, and the quiet zone is already inside every file we produce.

The 0.4 mm module floor is from the Swiss QR-bill implementation guidelines (SIX). GS1 sets a comparable 0.396 mm minimum for retail scanning.

We ship colour and size. We do not ship a centre logo, module shapes, eye shapes or gradient fills, because a payment QR that fails to scan is a failed payment.

Appearance settings are remembered on this device. Payment data is never saved.

EPC payload89 of 331 bytes
EPC069-12 payload, 89 of 331 bytes used
LineFieldValueSourceBytes
1Service tagBCDfixed3
2Version002fixed3
3Character set1fixed1
4IdentificationSCTfixed3
5BICGIBAATWWdetected8
6Beneficiary nameExample Studio GmbHyou19
7IBANAT232011100234573201you20
8AmountEUR120you6
9Purposeemptynot used0
10Structured referenceemptynot used0
11Unstructured referenceInvoice 2026-014you16
12Beneficiary to originatoremptynot emitted0
Line separators10
Total89

331 bytes is the byte capacity of a QR version 13 symbol at error correction M, which is exactly what EPC069-12 fixes. That identity holds only at M.

What Is an EPC QR Code?

An EPC QR code is a QR code whose content is a SEPA credit transfer instruction. The European Payments Council published the format as EPC069-12 so that a payer can scan an invoice instead of typing an IBAN, an amount and a reference by hand. The content is plain text, one element per line in a fixed order, meant to sit next to the same details printed as text.

A QR code that holds only an IBAN carries no beneficiary and no amount, so it is not a payment instruction under EPC069-12. For that simpler code, use the IBAN QR code generator. In Germany the EPC code is known as a GiroCode; the GiroCode generator is set up for German accounts and adds the Bundesbank account check.

EPC QR Code Generator: an Austrian IBAN, a payee, EUR 120 and an RF creditor reference build a version 002 EPC payment QR of 88 bytes, with the EPC069-12 conformance report showing 16 of 16 rules holding

How Do You Know an EPC QR Code Follows the Standard?

The report under the fields reads the finished code back with the same parser as our payment QR decoder and checks it against EPC069-12: the four header elements, the length of each field, the euro amount range, one reference rather than two, the BIC where it is required, no separator after the last populated element, the 331-byte budget, error correction level M and a symbol no larger than version 13. An RF creditor reference is also checked for its ISO 11649 check digits.

It judges what was written into the code, not what the form holds, so a field that was shortened or dropped to fit shows up there. A code that passes every rule is well formed. Whether a particular banking app reads it remains that bank's decision.

What Are the Twelve Elements of an EPC QR Code?

The payload has up to twelve elements, one per line. The first seven lines are always present; the BIC line may be empty in version 002. Elements after the last one that carries data are left out altogether.

The twelve elements of an EPC QR payload in order, with byte counts, grouped into the header, the payee and the payment, against the 331 byte budget

Open the diagram at full size

  • 1. Service tag: always BCD.
  • 2. Version: 001 or 002. The tool starts on 002.
  • 3. Character set: a digit from 1 to 8. We write 1, UTF-8, so accented names survive.
  • 4. Identification: always SCT, for SEPA credit transfer.
  • 5. BIC of the beneficiary's bank. Required in version 001; in version 002 it may stay empty unless a bank outside the EEA is involved.
  • 6. Beneficiary name: up to 70 characters. The person or company being paid, never the bank.
  • 7. IBAN of the account the money goes to.
  • 8. Amount: the currency code and the value with no space, from 0.01 to 999,999,999.99. The tool writes it as short as it can be, EUR120 rather than EUR120.00, as the guideline's own example EUR12.3 does and as the Austrian rules require.
  • 9. Purpose: up to four letters or digits.
  • 10. Creditor reference (the standard's structured reference): up to 35 characters; an ISO 11649 RF creditor reference may be used, and that is what this tool writes.
  • 11. Free-text reference (the standard's unstructured reference): up to 140 characters. Only one of elements 10 and 11 may be filled.
  • 12. Note to the payer: up to 70 characters. The standard calls it beneficiary to originator information.

The payload inspector under the tool shows each element with its byte count. For the arithmetic behind RF check digits, see the RF creditor reference generator; for the story behind each element, including a mistake we made with element 6, read what is inside a SEPA payment QR code.

Version 001 or 002: When Is the BIC Required?

Version 001 always requires the BIC of the beneficiary's bank. Version 002 makes it optional, with one exception written into the guideline: the BIC stays mandatory when a scheme participant from outside the European Economic Area is involved. That covers SEPA countries such as Switzerland, the United Kingdom and Monaco. The tool starts on 002, fills in the BIC when our directory knows the bank, and locks the downloads when a BIC is required and missing. Finland's own guidance asks for version 001, so the switch is there.

Which Error Correction Level Does an EPC QR Code Use?

EPC069-12 specifies level M. Some QR libraries raise the level on their own when a higher one fits into the same symbol; this generator turns that off, so every code is written at M. The centre logo offered by our IBAN QR code generator needs a higher level, so it is not offered here.

How Much Data Fits in an EPC QR Code?

At most 331 bytes, the capacity of a version 13 QR symbol at level M. The limit counts bytes, not characters, so a name in Greek or Cyrillic uses more of it than the same number of Latin letters. The bar above the code shows how much of the budget is used. If the content would not fit, the generator first drops the note to the payer and then the reference, and says so, rather than produce a code with a truncated IBAN.

Which Countries Use EPC QR Codes, and Which Use Their Own?

The instruction inside the code is a SEPA credit transfer, so the receiving account should be at a bank that takes part in SEPA. Our directory marks 42 IBAN countries as SEPA. Some countries publish their own rules for printing the same code: Austria prints it inside a frame labelled "Zahlen mit Code", Belgium asks for at least 2 by 2 cm on the invoice, and Finland asks for a module of at least 0.5 mm. Belgium also fills element 10 with its own structured communication where other countries use an RF reference. When the IBAN is from one of these countries, the tool shows the rule under the report.

Other countries use payment QR formats of their own that an EPC reader does not read: the Swiss and Liechtenstein QR-bill, Czech QR Platba and Slovak PAY by square among them. On an invoice that requires one of those, an EPC code does not replace it.

What Can an EPC QR Code Not Tell You?

Nothing in the payload ties the beneficiary name to the IBAN. A code can name one company and pay an account that belongs to someone else, and it will scan perfectly. The check that compares the two is Verification of Payee, which only the account-holding bank can run.

If you received a code rather than made one, the payment QR decoder reads it back element by element and checks the account it pays before you do.

Frequently Asked Questions

What is an EPC QR code?

An EPC QR code, also called a SEPA QR code, carries a complete SEPA credit transfer: the beneficiary's name and IBAN, optionally the BIC, an amount in euro and a reference. The European Payments Council describes it in the guideline EPC069-12. A banking app that supports it fills in the transfer from the code, and the payer confirms.

Is an EPC QR code the same as a GiroCode?

GiroCode is the name used in Germany for codes that follow EPC069-12. We know of no separate published GiroCode specification, so both our generators write the EPC069-12 payload. The GiroCode generator is set up for German accounts and invoices.

Does an EPC QR code expire?

No. EPC069-12 has no expiry element, so a code keeps working for as long as the account in it exists. Change the code when the account, the amount or the reference changes.

Can someone take money from my account with an EPC QR code?

No. The code only fills in a transfer that the payer still has to confirm in their own banking app. The real risk runs the other way: a code whose account was swapped for someone else's. Before paying a code you did not make, read it with our payment QR decoder.

Why does my banking app not read the code?

Support is each bank's decision; the standard leaves it to them. If a code does not scan, check that it passes the conformance report, that it is printed large enough and in a dark colour on a light background, and try another app before changing the code.

Can an EPC QR code carry an amount in another currency?

The guideline describes a SEPA credit transfer, which is a euro payment, so the amount is expected in euro. The generator writes amounts in euro only.

Is my data stored when I create an EPC QR code?

No. The code is generated in your browser. The IBAN, name, amount and reference are not sent to our servers.

Sources & References

Last updated: September 2026