Titelbild zum Artikel „GiroCode: was fest im Symbol steht und was nicht“
Technologie

GiroCode: was fest im Symbol steht und was nicht

6 Min. Lesezeit
QR-Code erstellen

Die Rechnung des Stadtwerks kommt mit einem kleinen Quadrat neben der Bankverbindung. In der App Ihrer Bank geöffnet, füllt es das Überweisungsformular: Empfänger, IBAN, Betrag, Verwendungszweck, alles schon eingetragen. Vom Server geholt wurde dafür nichts. Jeder dieser Werte wurde beim Erstellen der Rechnung in das Symbol gedruckt, und in fünf Jahren stehen dieselben Werte noch darin.

Das ist ein GiroCode, eine engere Sache als die meisten annehmen, und genau deshalb lohnt genaues Verständnis: Das Format gießt Entscheidungen in Druckfarbe.

Was ein GiroCode ist

Ein GiroCode ist ein gewöhnlicher QR-Code, der eine Textnutzlast trägt, die der European Payments Council in einer Richtlinie definiert hat, üblicherweise zitiert als EPC069-12. Die Nutzlast beschreibt eine SEPA-Überweisung in Euro. Eine Banking-App liest sie und füllt ein Überweisungsformular vor; freigeben muss der Zahler die Zahlung weiterhin selbst. Es fließt kein Geld, nur weil ein Code gescannt wurde.

Was er nicht ist: die schweizerische QR-Rechnung, ein anderes Format auf einem anderen Zahlteil, mit einem Schweizerkreuz mitten im Symbol. Eine deutsche Banking-App behandelt das eine nicht wie das andere.

Die Nutzlast sind Zeilen in fester Reihenfolge

Der Inhalt ist reiner Text: ein Feld pro Zeile, getrennt durch Zeilenumbrüche. Die Position trägt die Bedeutung, die Reihenfolge ist also nicht verhandelbar.

  1. Service-Tag, immer BCD.
  2. Version, entweder 001 oder 002.
  3. Zeichensatz, eine Ziffer.
  4. Kennzeichnung, immer SCT.
  5. BIC der Empfängerbank, bei Version 001 verpflichtend, bei 002 innerhalb des EWR optional.
  6. Name des Empfängers, bis zu 70 Zeichen.
  7. IBAN des Empfängers, bis zu 34 Zeichen.
  8. Betrag, geschrieben als EUR gefolgt von der Zahl.
  9. Zweckcode, vier Zeichen.
  10. Strukturierte Gläubigerreferenz.
  11. Unstrukturierter Verwendungszweck, bis zu 140 Zeichen.
  12. Ein Hinweis an den Zahler.

Verwendet wird entweder die strukturierte Referenz oder der unstrukturierte Text, niemals beides, und die gesamte Nutzlast ist auf 331 Byte begrenzt. Ein unbenutztes Feld ist eine leere Zeile und keine weggelassene, wobei leere Zeilen am Ende entfallen dürfen.

Weil die Position die Bedeutung trägt, scheitert eine fast richtige Nutzlast auf interessante Weise. Fehlt ein Zeilenumbruch, rutscht jeder Wert danach um eine Stelle nach oben, und der Betrag landet dort, wo der Zweckcode stehen sollte. Die App sieht keinen fehlerhaften Code. Sie sieht ein anders ausgefülltes Formular.

Welche Apps ihn lesen und welche nicht

Unterstützt wird er von deutschen und österreichischen Privatkunden-Banking-Apps, und darin liegt auch die Grenze seiner Nützlichkeit. Die Apps der Sparkassen und der Genossenschaftsbanken, die Apps der großen Geschäftsbanken und in Österreich die wichtigsten Privatkunden-Apps beherrschen ihn in unterschiedlichem Umfang. Weil sich diese Liste mit jeder App-Version verschiebt, prüfen Sie die App, die Ihre Kundschaft tatsächlich benutzt, statt einer veröffentlichten Aufstellung zu vertrauen, diesen Absatz eingeschlossen.

Alles Übrige dekodiert den Text und tut nichts damit. Eine Handykamera oder eine allgemeine Scanner-App liest einen GiroCode einwandfrei und zeigt zwölf Zeilen, die mit BCD beginnen, was korrekt und völlig nutzlos ist: Eine Überweisung zu starten braucht eine App, die mit einem Bankkonto verbunden ist. Außerhalb des Euroraums ist ein GiroCode Dekoration auf einer Rechnung.

Alles Wichtige steckt fest im Symbol

Das ist eine statische Nutzlast. IBAN, Betrag und Verwendungszweck sind Teil des gedruckten Musters, und beim Scannen wird nichts nachgeladen. Daraus folgen drei Dinge, und alle drei überraschen Rechnungssteller regelmäßig.

Eine falsche IBAN oder ein falscher Betrag bedeuten einen Nachdruck, keine Korrektur. Hinter einem GiroCode steckt kein Dashboard, weil darin keine Weiterleitung steckt, also greift keine der Möglichkeiten aus ein gedrucktes Ziel ohne Nachdruck ändern. Eine URL in einem Symbol lässt sich umlenken; eine IBAN in einem Symbol ist die IBAN für immer.

Ein auf eine Rechnung gedruckter Betrag bleibt der Betrag, den der Code einsetzt. Teilzahlungen, Gutschriften und Ratenvereinbarungen weichen alle davon ab, und der Code bietet noch lange die ursprüngliche Zahl an, nachdem sich der Saldo geändert hat. Bei allem, was in Teilen zahlbar ist, ist ein leeres Betragsfeld ehrlicher als eine Zahl, die veraltet.

Und Codes je Rechnung bedeuten Symbole je Rechnung, also einen Datenserienabgleich im Abrechnungssystem und keine Gestaltungsaufgabe.

Der Zeichensatz ist enger, als das Format vermuten lässt

Die Nutzlast benennt in ihrer dritten Zeile einen Zeichensatz, und ein QR-Symbol trägt jedes Byte, das Sie ihm übergeben. Die Einschränkung liegt in der Zahlung darunter, nicht im Code. Die SEPA-Verfahren akzeptieren einen eingeschränkten lateinischen Zeichensatz, im Wesentlichen die Buchstaben ohne Akzente, Ziffern, Leerzeichen und eine kurze Liste an Satzzeichen.

Umlaute und das scharfe s sind der alltägliche Verlust. Ein Empfängername wird umgeschrieben, aus Müller wird also Mueller, entweder durch den Rechnungssteller oder durch eine Stelle weiter hinten in der Kette, und Namen in nichtlateinischer Schrift ergeht es schlechter. Das ist eine Verfahrensregel und keine Grenze des QR-Codes, aber es trifft denjenigen, der die Nutzlast baut, und das Ergebnis ist ein verstümmelter Empfängername auf genau dem einen Bildschirm, den der Zahler prüfen soll. Nichtlateinischer Text und Kodierung behandelt das allgemeine Problem; hier ist die Einschränkung strenger als alles, was die Symbologie auferlegt.

Der überklebte Aufkleber ist die ganze Sicherheitsgeschichte

Ein GiroCode trägt keine Signatur und keinen Nachweis, wer ihn erzeugt hat: Jeder kann einen gültigen für jede IBAN erzeugen. Der Angriff ist deshalb physisch und billig: ein Etikett über den Code auf einer Rechnung, einer Mahnung oder einer Spendenbox gedrückt, und jeder Scan danach füllt ein Formular aus, das woanders hinführt.

Was das funktionieren lässt, ist, dass nichts falsch aussieht. Die App öffnet sich, das Formular ist ausgefüllt, der Verwendungszweck passt zur Rechnung in der Hand des Zahlers, und das einzige geänderte Feld ist das, das die meisten Menschen nicht lesen. Der Name des Empfängers und die IBAN erscheinen durchaus auf diesem Bestätigungsbildschirm, und das ist die einzige Kontrolle im ganzen System. Sie wirkt nur, wenn jemand hinsieht.

Drei Dinge helfen. Drucken Sie die IBAN als Text neben den Code, damit ein Zahler beides vergleichen kann. Behandeln Sie jede unerwartet eintreffende Zahlungsaufforderung als verdächtig, unabhängig vom Briefkopf, denn das ist das Muster hinter den meisten Quishing-Versuchen. Und wenn Sie der Rechnungssteller sind, vermeiden Sie aufgeklebte Codes auf Dokumenten, denn ein Aufkleber, der dort hingehört, lehrt Kundschaft, dass ein Aufkleber normal ist. Dieselbe Logik von der Marktstandseite her durchzieht Zahlungscodes an einem Standschild.

GiroCode neben der E-Rechnung: zwei Wege zu einem Zahlbetrag

Zuerst eine Verwechslung, die hier täglich passiert: girocard ist das Debitkartensystem, mit dem an der Kasse bezahlt wird. Der GiroCode ist etwas anderes, nämlich ein Zahlungscode nach dem EPC-Standard, der eine Überweisung vorbereitet. Wer nach Anbietern sucht, sortiert an dieser Stelle die Hälfte der Treffer aus.

Der Code ersetzt keine Rechnungsangabe. Was auf eine Rechnung gehört, steht in §14 UStG: Name und Anschrift beider Seiten, Steuernummer oder Umsatzsteuer-Identifikationsnummer, Datum und Rechnungsnummer, Leistung und Zeitpunkt, Netto, Steuersatz und Steuerbetrag. Diese Angaben müssen lesbar auf dem Dokument stehen. Der GiroCode ist eine Bequemlichkeit für den Menschen, der zahlt, und kein Träger von Pflichtangaben.

Wichtiger ist die Einordnung neben der elektronischen Rechnung. Im deutschen Geschäftsverkehr zwischen Unternehmen läuft die Umstellung auf strukturierte Formate, also XRechnung als reine XML-Datei oder ZUGFeRD, das dieselben Daten in ein PDF einbettet. Dort stehen IBAN, Betrag und Verwendungszweck maschinenlesbar im Datensatz, und die Buchhaltungssoftware liest sie ohne Kamera. Der GiroCode löst deshalb ein anderes Problem: Er hilft dem Menschen, der eine Rechnung in seiner Banking-App bezahlt, also vor allem bei Privatkunden, Vereinsbeiträgen und Handwerkerrechnungen. Wer überwiegend an große Unternehmen fakturiert, investiert die Zeit besser in das strukturierte Format als in das Quadrat.

Für Vereine ist der Code dagegen unterschätzt. Ein Spendenaufruf mit fest gesetztem Empfänger und Verwendungszweck erzeugt Zahlungseingänge, die sich ohne Rückfrage zuordnen lassen, und genau diese Zuordnung ist die Arbeit, die einem Kassenwart die Zuwendungsbestätigungen verdirbt. Setzen Sie den Verwendungszweck so, dass er Aktion und Jahr enthält, und lassen Sie den Betrag offen, wenn Sie Spenden sammeln, statt einen Wunschbetrag festzuschreiben.

Der Betrag ist überhaupt der Punkt, an dem eingedruckte Codes kippen. Weil jeder Wert fest im Symbol steht, gilt ein Code mit Betrag für genau eine Rechnung. Eine Drucksache, die mit festem Betrag über Jahre ausliegt, sammelt irgendwann Zahlungen für einen Preis, den Sie längst nicht mehr nehmen. Für wiederkehrende Drucksachen nehmen Sie einen Code ohne Betrag, oder Sie erzeugen ihn je Rechnung im Rechnungslauf.

Woher man einen bekommt und ob man einen will

QRolling erzeugt keine EPC-Nutzlasten. Die Typen hier sind URL, Text, WLAN, vCard, E-Mail, SMS, Telefon und der Rest der Liste im Generator, und keiner davon baut eine SEPA-Überweisung. Wenn Sie einen GiroCode brauchen, gibt es zwei sinnvolle Quellen: die App Ihrer eigenen Bank, denn mehrere geben einen Code für Ihr Konto aus, oder ein Werkzeug, das ausdrücklich für das EPC-Format gebaut ist. Für das eigens gebaute Werkzeug spricht ein einziger Grund: Feldreihenfolge, Zeilenumbrüche, Zeichensatz und die Bytegrenze zu treffen ist die gesamte Aufgabe, und ein allgemeines Textfeld prüft davon nichts.

Es besteht außerdem eine gute Chance, dass ein GiroCode nicht das ist, was Sie brauchen. Lautet die Anforderung "Kundschaft scannt und zahlt", dann erreicht eine gehostete Zahlungsseite hinter einem URL-Code jedes Handy in jedem Land, ohne Abhängigkeit von der Bank des Zahlers, beherrscht Karten genauso wie Überweisungen und erzeugt einen Zahlungsbeleg. Das ist, was die Seiten zum Zahlungscode behandeln, und weil jeder Code hier dynamisch ist, bleibt das Ziel im kostenpflichtigen Tarif bearbeitbar, was das eine ist, was eine gedruckte IBAN nie sein kann.

Bevor ein GiroCode auf eine Rechnungsvorlage wandert, testen Sie das fertige Dokument in den Banking-Apps, die Ihre Kundschaft benutzt, und drucken Sie die IBAN neben das Symbol, damit ein Zahler das Formular gegen das Papier prüfen kann.

Diesen Artikel teilen