GiroCode explained: how the QR code for SEPA transfers works
More and more invoices, donation flyers and club letters now carry a small QR code labeled "GiroCode". Scan it with your banking app and you no longer have to type in the IBAN, amount and payment reference by hand: the transfer form is filled in for you. This article explains, in plain terms, what sits behind the black-and-white pattern, how the underlying EPC standard is structured, why the method rules out typos and how you can create a scan-ready GiroCode yourself in under a minute. As of 2026.
What a GiroCode actually is
A GiroCode is a QR code that contains all the details of a SEPA transfer: payee name, IBAN, optionally the BIC, the amount and the payment reference. Scan it with a banking app and the app reads out this data and fills in the transfer form automatically. All you have to do is check it and confirm with your TAN.
"GiroCode" is the name commonly used in Germany for a code that follows the official EPC069-12 standard of the European Payments Council, often simply called the EPC QR code. The brand name was coined by the German Banking Industry Committee, but technically there is always the same European standard behind it.
The key difference from a normal QR code holding a web address: a GiroCode contains no link that sends you to a website, but a clearly structured data record that banking apps interpret directly as a transfer order. So no browser opens; instead your banking program does.
The technical structure under EPC069-12
At its core a GiroCode is plain text, laid out line by line. Each piece of information sits on its own line, separated by a line break. The order is fixed so that every app can map the fields reliably. The entire data record may not be longer than 331 bytes.
The fields, in the prescribed order, are: the service tag BCD, the version number 002, the character set (1 stands for UTF-8), the identifier SCT for SEPA Credit Transfer, the BIC, the payee name (maximum 70 characters), the IBAN, the amount, an optional purpose code, a structured reference and a free-form payment reference.
The amount is always given in euros and written with the prefix EUR, for example EUR49.90. A period serves as the decimal separator, and values between 0.01 and 999,999,999.99 euros are allowed. If the creator leaves the amount field empty, the payer can enter the amount themselves in their app, which is especially handy for donations.
Required and optional fields
Exactly two entries are mandatory: the payee name and the IBAN. Without them a GiroCode makes no sense, because the bank needs to know who the money should go to. Everything else is optional and depends on the purpose.
The BIC has not been required for transfers within the SEPA area for years, because it can be derived from the IBAN. Version 002 of the EPC standard therefore explicitly allows the BIC field to be left empty. For payments to some non-EEA countries a BIC can still be useful.
For the payment reference you have two mutually exclusive options. Either you use the free-form payment reference with up to 140 characters for plain text such as "Invoice 2026-001" or "Membership fee". Or you use a structured reference following the ISO 11649 standard with the RF prefix, which can be processed automatically. Both at the same time is not supported.
Why error correction is set to level M
QR codes have built-in error correction that comes in four levels, from L to H. It ensures that a code stays readable even when part of it is dirty, creased or slightly damaged in printing. The higher the level, the more redundancy the code carries, but the denser the pattern also becomes.
The EPC standard requires at least level M for GiroCodes, which can restore around 15 percent of the data. This requirement is no accident: it is the compromise that virtually all banking apps handle reliably. A lower level could cause individual apps to reject the code.
For that reason the GiroCode generator on CalcSI automatically raises error correction to at least level M as soon as you choose GiroCode mode. You do not have to worry about it yourself, and you can still set a higher level if the code is printed on rough paper or in a small format.
Where you encounter GiroCodes in everyday life
You will most often find GiroCodes on invoices. Instead of laboriously typing the IBAN and amount into the banking app, the customer scans the code and sees all the data correctly pre-filled. That noticeably reduces the number of payments with a wrong IBAN or a forgotten payment reference, which in turn eases the workload in accounting.
A second major use case is donation appeals. Aid organizations print the GiroCode on flyers, posters and ads. Because the amount field can be left empty, the donor decides how much to give, while the payee and the payment reference are fixed. Exactly this combination makes the donation convenient and error-free at the same time.
Clubs and associations also like to use GiroCodes for membership fees, and they appear on reminders, event tickets or letters from school as well. Wherever someone needs to transfer a fixed amount quickly and correctly, the code saves time and nerves on both sides.
The real benefit: no more typos
In Germany an IBAN consists of 22 characters, and every digit has to be right. Anyone typing it out by hand makes mistakes more often than they would like. The check digit contained in the IBAN catches many typos, but not all, and a payment sent to a wrong but mathematically valid IBAN is hard to get back.
The GiroCode removes this risk, because the data no longer passes through human hands but is transferred by machine. Whatever is in the code ends up unchanged in the transfer form. Typos in the IBAN, amount or payment reference are thereby practically ruled out.
On top of that comes the time saved. A transfer by scan takes a few seconds instead of a minute, and especially with recurring payments that adds up. For companies, a higher rate of correctly matched incoming payments also means less manual rework.
How to create a GiroCode on CalcSI
In the CalcSI QR code generator you will find the GiroCode tab in the top bar, next to URL, Wi-Fi and vCard. A click on it brings up the matching form, and error correction is set automatically to the required level in the background.
First enter the payee name and IBAN. The IBAN is checked directly in your browser via a checksum calculation: if the check digit does not match, a subtle notice appears without blocking you. As a rule you can leave out the BIC.
Next you optionally add the amount and payment reference. If you want the payer to set the amount themselves, simply leave the amount field empty. Finally you download the finished code as PNG or SVG and print it on an invoice, flyer or poster. The entire calculation runs locally in your browser; no bank data is sent to a server.
Structured reference and purpose code for pros
Anyone who wants to reconcile incoming payments automatically reaches for the structured reference instead of the free-form payment reference. This RF reference following ISO 11649 contains its own check digit and can be mapped unambiguously to an invoice by accounting systems. A typical reference looks like RF18 5390 0754 7034.
In addition there is the purpose code, a four-character identifier that categorizes the purpose of a payment. Codes such as GDDS for purchases of goods, SALA for salaries or CHAR for donations help banks and accounting departments sort payments automatically. For private transfers this field is usually unnecessary.
In the generator you switch between free text and a structured reference using the "Payment reference type" selector. That keeps the form simple for everyday use while still offering the pro fields when you need them.
Security: what a GiroCode can and cannot do
A GiroCode is first of all just a data carrier. It contains exactly the information that is visible on an invoice anyway, namely the payee, IBAN and amount. Sensitive login details or TANs are never part of a GiroCode, and the transfer is only triggered after your explicit confirmation in the app.
Even so, the same caution applies as with any QR code: you cannot tell from the pattern which IBAN it contains. Fraudsters exploit this in what is known as quishing, by placing forged codes on invoices or stickers. So before confirming, always check whether the payee name and IBAN shown in the app match what you expect.
You should be especially skeptical of GiroCodes from unsolicited emails, supposed fine notices or stickers pasted over genuine codes. When in doubt, transfer the money manually to the IBAN you know from a trusted source.
Frequently asked questions about the GiroCode
Which apps recognize a GiroCode? Almost all banking apps from savings banks, cooperative banks and private banks in Germany and Austria support the standard. The scan function is usually hidden in the transfer dialog behind a QR symbol.
Does a GiroCode work outside the eurozone too? The standard is designed for the SEPA area and euro payments. Within that area it works across borders; it is not intended for payments in a foreign currency.
Can I change the amount afterwards? The amount stored in the code is fixed. If you want a different amount, you have to generate a new code. If the payer should choose freely, leave the amount field empty from the start.
How CalcSI tools help
You create the GiroCode itself in the QR code generator, which besides the payment code also creates QR codes for URLs, Wi-Fi, contact details and more, and can be freely styled in color, shape and logo. Whether an IBAN is correct and which bank it belongs to is something you check with the IBAN calculator and validator. If you want to cleanly encode links for classic QR codes, use the URL encoder, and checksums for files or text are provided by the hash generator.
Comments
Comments are powered by Disqus. Before they load, we need your consent — Disqus is a third-party service and sets its own cookies.