Was ist der EPC-Standard?
Der European Payments Council (EPC) ist das Lenkungsgremium des europäischen Bankensektors, das technische und regulatorische Standards für Zahlungen im SEPA-Raum definiert. Das EPC wurde 2002 gegründet und hat seitdem maßgebliche Standards wie SEPA Credit Transfer (SCT), SEPA Direct Debit (SDD) und – für uns besonders relevant – das EPC Quick Response Code Framework entwickelt.
Das relevante Dokument für den GiroCode-Standard heißt offiziell „EPC069 – Quick Response Code: Guidelines to Enable the Data Capture for the Initiation of a SEPA Credit Transfer". Es definiert exakt, wie die Zahlungsinformationen strukturiert und in einem QR-Code kodiert werden müssen.
Geschichte und Entwicklung
Die Entwicklung des EPC-QR-Standards begann parallel zur SEPA-Migration Anfang der 2010er Jahre. Mit der vollständigen SEPA-Migration in Deutschland im Jahr 2014 und der anschließenden Abschaffung der BIC-Pflicht für SEPA-Überweisungen im Jahr 2016 wurden die Grundlagen für eine vereinfachte QR-Code-basierte Zahlung geschaffen.
In Deutschland wurde der Standard unter dem Namen „GiroCode" von der Deutschen Kreditwirtschaft (DK) eingeführt und ab 2018 aktiv beworben. Österreich folgte mit dem „Stuzza-QR", die Schweiz entwickelte parallel die „Swiss QR Bill" – beide basieren auf ähnlichen Prinzipien, weichen aber in Details ab.
Warum wurde der EPC-Standard eingeführt?
Vor dem EPC-Standard gab es verschiedene proprietäre QR-Code-Formate, die bankspezifisch und nicht interoperabel waren. Wenn Kunde A bei Sparkasse Banking zahlen wollte und der Rechnungssteller einen Volksbank-spezifischen QR-Code nutzte, scheiterte der Scan. Mit dem einheitlichen EPC-Standard kann jede Banking-App jedes EPC-konforme QR-Code lesen – unabhängig davon, welche Bank den Code generiert hat.
Verbreitung in Europa
Der EPC-Standard ist heute in den meisten SEPA-Ländern anerkannt, wenn auch nicht überall gleich stark verbreitet. In Deutschland, Österreich, den Niederlanden und Belgien ist die Unterstützung durch Banking-Apps besonders hoch. Die Schweiz hat einen eigenen Standard (QR-Rechnung) eingeführt, der auf dem EPC-Standard aufbaut, aber eigene Felder hinzufügt.
Der technische Aufbau des EPC-Payloads
Der EPC-Payload ist ein reiner Klartext, der in mehrere Zeilen unterteilt ist. Jede Zeile hat eine genau definierte Bedeutung. Der Text wird dann als QR-Code kodiert. Hier ist ein vollständiges Beispiel:
BCD 002 1 SCT BELADEBEXXX Max Mustermann GmbH DE89370400440532013000 EUR1250.00 Rechnung RE-2024-0042
Hier ist jede Zeile im Detail erklärt:
Zeile 1: Service Tag (BCD)
Der Service Tag BCD (Bank Customer Data) ist eine feste Kennung, die jede Banking-App erkennt und als Signal für einen EPC-konformen QR-Code wertet. Fehlt dieser Tag, wird der QR-Code von Banking-Apps nicht als GiroCode interpretiert und möglicherweise ignoriert. BCD ist immer der erste Eintrag und darf nicht verändert werden.
Zeile 2: Version (001 oder 002)
Die Versionsnummer gibt an, welche Version des EPC-Standards verwendet wird. Aktuell sind 001 und 002 in Verwendung. Version 002ist die neuere und empfohlene Variante, die von modernen Banking-Apps bevorzugt wird. Beide Versionen sind weitgehend kompatibel; die meisten Apps akzeptieren beide.
Zeile 3: Encoding (Zeichenkodierung)
Der Wert 1 steht für UTF-8-Kodierung. Dies ist der Standard für moderne Anwendungen und erlaubt die Verwendung von Umlauten (ä, ö, ü) und anderen Sonderzeichen. Andere Werte (2–8) stehen für ältere Kodierungen wie ISO-8859-1, werden aber praktisch kaum noch verwendet. In der Implementierung sollte immer UTF-8 (Wert 1) verwendet werden.
Zeile 4: Identification (SCT)
SCT steht für SEPA Credit Transfer – also die SEPA-Überweisung. Dies ist derzeit der einzige für GiroCodes vorgesehene Wert. Andere Zahlungsarten wie SEPA Direct Debit werden durch den GiroCode-Standard nicht abgebildet.
Zeile 5: BIC (Bank Identifier Code)
Der BIC des Empfängers ist seit der vollständigen SEPA-Migration im Jahr 2016 für rein innereuropäische Überweisungen optional. Die Zeile kann leergelassen werden. Viele Generatoren lassen sie dennoch befüllen, um maximale Kompatibilität mit älteren Banking-Apps sicherzustellen. Ein gültiger BIC hat 8 oder 11 Stellen.
Zeile 6: Name des Empfängers (max. 70 Zeichen)
Der Name des Kontoinhabers – also der Person oder des Unternehmens, an die die Zahlung geht. Maximal 70 Zeichen. Dieser Wert ist einPflichtfeld. Der eingetragene Name muss nicht zwingend mit dem offiziellen Kontonamen übereinstimmen, sollte es aber für eine reibungslose Buchung. Sonderzeichen und Umlaute sind mit UTF-8-Encoding erlaubt.
Zeile 7: IBAN des Empfängers
Die vollständige IBAN (International Bank Account Number) des Empfängers. Dies ist neben dem Empfängernamen das wichtigste Pflichtfeld. Eine deutsche IBAN beginnt mit DE und hat 22 Zeichen. Fehler in der IBAN führen entweder zu einer ungültigen Transaktion oder – im schlimmsten Fall – zu einer Fehlbuchung auf ein fremdes Konto.
Zeile 8: Betrag (Format EUR12.34)
Das Betragsfeld ist optional. Wenn ein Betrag angegeben wird, muss er im Format EUR gefolgt vom Betrag mit Punkt als Dezimaltrennzeichen angegeben werden – also z. B. EUR12.34 oder EUR1250.00. Ein Komma als Dezimaltrennzeichen ist nicht erlaubt und führt zu Scan-Fehlern. Der maximale Betrag beträgt laut EPC-Spezifikation 999999999.99 EUR.
Zeile 9: Purpose Code (leer lassen)
Dieser optionale Code kann einen standardisierten Zahlungszweck angeben (z. B.GDDS für Waren-Kauf). In der Praxis wird dieses Feld in Deutschland fast immer leergelassen. Banking-Apps ignorieren es in der Regel oder zeigen es nicht an.
Zeile 10: Referenz (Remittance Reference)
Strukturierte Zahlungsreferenz – in der Regel leer. Wird in einigen Ländern (z. B. Belgien mit dem strukturierten BBA-Format) intensiv genutzt. In Deutschland ist es üblich, dieses Feld freizulassen und stattdessen Zeile 11 für den Verwendungszweck zu nutzen.
Zeile 11: Verwendungszweck (max. 140 Zeichen)
Der Freitext-Verwendungszweck, der in der Überweisungsmaske erscheint. Maximal140 Zeichen. Hier sollte die Rechnungsnummer, ggf. Kundennummer und eine kurze Beschreibung der Leistung stehen. Dieses Feld ist optional, aber für eine ordnungsgemäße Buchhaltung unbedingt empfohlen.
EPC-Versionen im Vergleich: 001 vs. 002
Der EPC-Standard liegt aktuell in zwei aktiven Versionen vor. Beide werden von modernen Banking-Apps unterstützt, weisen aber kleine Unterschiede auf:
| Merkmal | Version 001 | Version 002 |
|---|---|---|
| Eingeführt | 2012 | 2016 |
| BIC | Pflichtfeld | Optional |
| Empfehlung | Legacy | Empfohlen |
| App-Kompatibilität | Sehr gut | Sehr gut |
Unser GiroCode Generator verwendet standardmäßig Version 002, da der BIC heute optional ist und die meisten Apps damit optimal umgehen können.
Fehlerkorrektur und QR-Code Qualität
Fehlerkorrekturlevel M (15 %)
QR-Codes können mit vier verschiedenen Fehlerkorrekturlevel kodiert werden:
- L (Low): ~7 % Fehlerkorrektur
- M (Medium): ~15 % Fehlerkorrektur
- Q (Quartile): ~25 % Fehlerkorrektur
- H (High): ~30 % Fehlerkorrektur
Der EPC-Standard schreibt für GiroCodes das Level M vor. Das bedeutet: Bis zu 15 % des QR-Code-Codes können beschädigt oder unleserlich sein, und der Code kann trotzdem noch korrekt dekodiert werden.
Warum Level M und nicht H?
Ein höheres Fehlerkorrekturlevel macht den QR-Code zwar robuster, aber auchphysisch größer, da mehr Redundanzdaten gespeichert werden müssen. Da ein GiroCode-Payload bereits recht lang sein kann (bis zu mehrere hundert Zeichen), würde Level H zu einem sehr dichten und schwer lesbaren QR-Code führen. Level M ist ein guter Kompromiss aus Robustheit und Lesbarkeit.
Auswirkungen auf die Scanbarkeit
Die Scanbarkeit hängt von mehreren Faktoren ab:
- Druckqualität: Mindestens 300 DPI für Druck empfohlen. Laserdrucke sind in der Regel besser geeignet als Tintenstrahldrucker.
- Kontrast: Schwarzer Code auf weißem Hintergrund ist optimal. Farbige QR-Codes können funktionieren, aber nur wenn der Kontrast ausreicht.
- Größe: Mindestens 2 × 2 cm für den Ausdruck, mindestens 100 × 100 Pixel für digitale Anzeige.
- Ruhezone: Um den QR-Code herum sollte ein weißer Rand von mindestens 4 Modulen (kleinste Einheit des QR-Codes) bestehen.
Mindestgröße des QR-Codes
Der EPC-Standard empfiehlt eine Mindestgröße von 2 × 2 cm für den Druck. Für zuverlässigen Scan auch in suboptimalen Lichtverhältnissen wird jedoch3 × 3 cm empfohlen. Unser Generator erzeugt standardmäßig hochauflösende QR-Codes, die für beide Verwendungszwecke geeignet sind.
EPC-Standard in verschiedenen Ländern
Obwohl alle SEPA-Länder prinzipiell den EPC-Standard nutzen können, hat jedes Land eigene Varianten oder Namen entwickelt:
Deutschland – GiroCode
In Deutschland wird der Standard als „GiroCode" bezeichnet. Er ist weit verbreitet, wird von allen großen Banken unterstützt und seit 2018 aktiv durch die Deutsche Kreditwirtschaft beworben. Die Implementierung folgt dem EPC-Standard ohne wesentliche Abweichungen.
Österreich – Stuzza QR
Österreich nutzt den „Stuzza-QR", entwickelt von der Studiengesellschaft für Zusammenarbeit im Zahlungsverkehr (Stuzza GmbH). Das Format basiert ebenfalls auf dem EPC-Standard, enthält aber in einigen Versionen zusätzliche Felder für den österreichischen Markt. GiroCodes und Stuzza-QR-Codes sind in der Regel wechselseitig kompatibel.
Belgien – QR-Rechnung
Belgien nutzt intensiv das strukturierte Referenzformat BBA (Belgisch strukturierter Kommunikationszeichen) in Kombination mit dem EPC-Standard. Die strukturierte Referenz (Zeile 10 des Payloads) wird hier häufig ausgefüllt, was in anderen Ländern unüblich ist.
Schweiz – QR-Bill (Swiss QR)
Die Schweiz hat eine eigene Spezifikation entwickelt: die „Swiss QR Bill" (QR-Rechnung), eingeführt 2020 als Ersatz für den orangen Einzahlungsschein. Sie basiert zwar auf dem QR-Code-Konzept, hat aber ein eigenes Format und ist nicht direkt kompatibel mit dem EPC-Standard. Da die Schweiz kein SEPA-Mitglied ist, gibt es hier eigene Zahlungsstandards.
Niederlande und Frankreich
In den Niederlanden und Frankreich ist der EPC-Standard weniger verbreitet als in Deutschland. Viele Banken unterstützen ihn zwar technisch, aber der Consumer-Markt hat andere Zahlungsmethoden bevorzugt (z. B. iDEAL in den Niederlanden).
Technische Implementierung in JavaScript
Der EPC-Payload ist simpel zu generieren – es handelt sich um einen reinen String, der mit Zeilenumbrüchen formatiert wird. Hier ein Beispiel, wie unser Generator den Payload erstellt:
function generateEpcPayload({
name, // Empfängername, max. 70 Zeichen
iban, // IBAN, z.B. DE89370400440532013000
bic = '', // BIC optional
amount = '', // z.B. "EUR12.34" oder leer
reference = '', // Verwendungszweck
version = '002',
}: GiroCodeInput): string {
const lines = [
'BCD', // Service Tag
version, // Version
'1', // UTF-8 Encoding
'SCT', // SEPA Credit Transfer
bic, // BIC (optional)
name, // Empfängername
iban, // IBAN
amount, // Betrag (optional)
'', // Purpose (leer)
'', // Structured Reference (leer)
reference, // Verwendungszweck
];
return lines.join('\n');
}Der so erzeugte String wird dann mit einer QR-Code-Bibliothek (z. B. dem npm-Paket qrcode) mit dem Fehlerkorrekturlevel M in einen QR-Code umgewandelt.
Häufige Fehler beim EPC-Standard
Falsche Zeichenkodierung
Wenn der Payload nicht als UTF-8 kodiert wird, können Umlaute (ä, ö, ü, ß) korrumpiert werden. Dies führt entweder zu einem unlesbaren QR-Code oder zu fehlerhaften Daten in der Überweisungsmaske. Lösung: Immer UTF-8 verwenden und Zeile 3 auf 1 setzen.
Zu langer Verwendungszweck
Der Verwendungszweck ist auf 140 Zeichen begrenzt. Wird dieser Wert überschritten, erzeugen manche Generatoren fehlerhafte QR-Codes, andere schneiden den Text einfach ab. Unser Generator zeigt ein Warnsignal an, wenn die Grenze erreicht wird.
Falsches Betragsformat
Der häufigste technische Fehler: EUR 12,34 statt EUR12.34. Leerzeichen zwischen Währung und Betrag sowie ein Komma statt eines Punktes als Dezimaltrennzeichen sind ungültig und führen zum Scan-Fehler.
Ungültige IBAN
Eine IBAN mit falscher Prüfziffer (Mod-97) führt zwar nicht zwingend zum Abbruch des Scans, kann aber von einigen Banking-Apps abgelehnt werden. Zudem besteht das Risiko einer Fehlbuchung. Immer die IBAN vor der Codierung prüfen!
Empfängername zu lang
Der Name des Empfängers ist auf 70 Zeichen begrenzt. Bei langen Firmennamen mit Rechtsform (z. B. „Mustermann Consulting und Beratung GmbH & Co. KG") muss ggf. eine Abkürzung verwendet werden.
GiroCode professionell nutzen – Software-Empfehlungen
Wer GiroCodes professionell und dauerhaft auf Rechnungen einsetzen möchte, kommt früher oder später an einer guten Buchhaltungs- oder Rechnungsstellungs-Software nicht vorbei. Einen GiroCode manuell zu erstellen ist für gelegentliche Nutzung in Ordnung – bei regelmäßiger Rechnungsstellung zahlt sich eine automatisierte Lösung jedoch schnell aus.
Wir empfehlen zwei bewährte Tools, die GiroCodes nativ unterstützen:
sevDesk
sevDesk ist eine der führenden deutschen Buchhaltungssoftwares für Selbstständige und KMUs. Rechnungen mit automatisch generiertem GiroCode lassen sich in wenigen Klicks erstellen und direkt per E-Mail versenden. Die Software ist DATEV-kompatibel und unterstützt die Kleinunternehmerregelung.
sevDesk kostenlos testen *FastBill
FastBill bietet eine einfache, auf Geschwindigkeit ausgelegte Rechnungsstellungs-Plattform. Mit FastBill erstellst du in unter zwei Minuten eine professionelle Rechnung inklusive GiroCode – direkt aus dem Browser, ohne Installation. Ideal für Freelancer und kleine Teams.
FastBill kostenlos testen ** Affiliate-Link – Wenn du über diesen Link kaufst, erhalten wir eine kleine Provision ohne Mehrkosten für dich.
Für gelegentliche Nutzung oder als erste Anlaufstelle empfehlen wir unseren kostenlosen GiroCode Generator – komplett lokal im Browser, ohne Registrierung.