Mit wenigen Zeilen LaTeX-Code ergänzen Sie eine selbst erstellte Rechnung um einen QR-Code mit den Rechnungsdaten für die automatisierte Überweisung.
Jede Rechnung hat zwar formal die gleichen Inhalte, sieht jedoch im Alltag je nach Rechnungsaussteller immer etwas anders aus. Mit der individuellen Gestaltung, möchten sich die Unternehmen von anderen Marktteilnehmern abheben.
Legen wir Rechnungen verschiedener Aussteller nebeneinander, befinden sich die einzelnen Elemente wie Rechnungsempfänger, Rechnungsaussteller, Bankverbindung, Rechnungsnummer oder Vorgangsreferenz, Betrag sowie die Angaben zu den Steuern stets an unterschiedlichen Stellen auf den Dokumenten. Eine automatisierte Verarbeitung durch Analysieren des Dokumenteninhalts bleibt fehlerträchtig. Selbst künstliche Intelligenz hilft da nicht weiter, auch wenn man anerkennen muss, dass die automatisierte Erkennung der Daten in den vergangenen Jahren große Fortschritte gemacht hat.
Als E-Rechnung
Die verstärkte Verpflichtung [1] zur Ausführung als elektronische Rechnung [2] besteht zwar in Deutschland bereits seit Anfang 2025. Der Standard ist jedoch bislang technisch nicht ausgereift [3] und manipulierbar [4]. Zudem ist für das Kalenderjahr 2025 nicht jedes Unternehmen in Deutschland verpflichtet, eine solche elektronische Rechnung auszustellen. Änderungen diesbezüglich ergeben sich erst in den kommenden Jahren.
Haben wir eine Rechnung erhalten, schließt sich deren Begleichung an. Dabei birgt das manuelle Übertragen der Zahlungsangaben aus der Rechnung in die einzelnen Felder zur (Online-)Überweisung das Risiko von Kopier- oder Tippfehlern, ganz zu schweigen von der Lesbarkeit, sofern Sie die Daten handschriftlich übertragen. Beide Seiten, Aussteller und Empfänger der Rechnung, sind verstimmt, wenn der Rechnungsbetrag nicht wie erwartet beim Lieferanten eintrifft.
Um dieses Risiko zu verringern und es dem Rechnungsempfänger zumindest leichter zu machen, ergänzen wir als Rechnungsaussteller unsere Rechnung um einen Quick Response Code oder kurz QR-Code. Er enthält ausschließlich die Angaben zur Zahlung und nichts anderes. Damit schaffen wir die technische Basis, dass der Rechnungsempfänger später die Angaben zur Zahlung mittels Smartphone oder Scanner aus der Rechnung auslesen kann.
Als Rechnungsempfänger übertragen Sie die ausgelesenen Daten elektronisch in das Überweisungsformular der von Ihnen genutzten Software oder Webseite Ihrer Bank. Mit diesem Umsetzungsschritt schließen Sie an das Niveau anderer Länder an, in denen die beschriebene Vorgehensweise parallel zu weiteren Verfahren seit längerer Zeit fester Bestandteil des Alltags ist. Beispiele dafür sind Scan2Pay (Niederlande und Belgien [5]), Scan & Pay bei EcoCash (Simbabwe und Lesotho [6]) sowie M-Pesa Scan-To-Pay (u.a. Kenia, Tansania und Mosambik [7]).
Bitte beachten Sie, dass sich über den QR-Code keine Prüfung auf Plausibilität der hinterlegten Zahlungsangaben vornehmen lässt. Sie können damit also nicht feststellen, ob der visuelle und der elektronische Anteil einer Rechnung übereinstimmen. Im Gegenteil: Es ist sogar ohne Weiteres möglich, dass Ihnen alle drei Komponenten unterschiedliche Daten präsentieren. Der Standard zur elektronischen Rechnung schreibt bislang kein verbindendes Element wie beispielsweise eine Prüfsumme zwischen den Anteilen oder eine digitale Signatur vor.
Es liegt in der Verantwortung des Rechnungsausstellers, in der Rechnung inklusive QR-Code die korrekten Daten zu hinterlegen. Bevor Sie eine Rechnung bezahlen, raten wir Ihnen zu einer selbstständigen Plausibilitätsprüfung, verbunden mit einem Abgleich mit der zuvor von Ihnen erteilten Beauftragung. Sorgfalt geht hier vor Bequemlichkeit. Es lässt sich allerdings bei aller Gewissenhaftigkeit nicht ausschließen, dass beim Erstellen der Rechnung und des QR-Codes sowie der Übermittlung der Daten an Sie Fehler passieren. In diesem Zusammenhang existieren eindeutige Gerichtsurteile zu Phishing und manipulierten Rechnungen auf dem Transportweg [8]. Sollten Ihnen die Daten nicht plausibel vorkommen, halten Sie am besten Rücksprache mit dem auf der Rechnung genannten Aussteller.
QR-Codes zu erzeugen, stellt mittlerweile kein Hindernis mehr dar [9]. Etliche verlässliche Implementierungen liegen sowohl für verschiedene Programmiersprachen vor als auch für Textverarbeitungen wie beispielsweise LibreOffice [10]. Für das Textsatzsystem LaTeX gibt es die drei Pakete Qrcode [11], Epcqrcode [12] und Pst-barcode [13]. Im Folgenden beschäftigen wir uns lediglich mit den ersten beiden, die weniger Ressourcen erfordern und auch leichter zu handhaben sind als Pst-barcode.
QR-Code zur Rechnung
In vielen europäischen Ländern findet auf den Rechnungen ein sogenannter EPC-QR-Code [14] Verwendung. Er wurde 2013 vom Europäischen Zahlungsverkehrsausschuss EPC (European Payments Council [15]) standardisiert. Österreich übernahm diesen QR-Code daraufhin zeitnah in seine Formulare, 2015 und 2016 folgten Finnland, Belgien sowie die Niederlande.
In Deutschland wird ein solcher EPC-QR-Code auf Rechnungen bislang noch recht wenig genutzt, taucht aber immer öfter auf. Es bleibt zu hoffen, dass die Einführung der E-Rechnung dem Ganzen einen kleinen Schubs gibt. Sparkassen sowie Volks- und Raiffeisen-Banken vermarkten ihre Implementierung des EPC-QR-Codes als GiroCode. Nach unserer Recherche besteht kein Unterschied zu den EPC-QR-Codes anderer Banken. Es handelt sich wohl lediglich um den Versuch, sich mit einem griffigeren Namen von der Konkurrenz abzuheben.
Der in der Schweiz seit 2020 genutzte Swiss QR Code sieht zwar auf den ersten Blick ähnlich aus, enthält aber mehr Daten als der EPC-QR-Code und ist daher auch nicht kompatibel. Mehr Informationen dazu finden Sie im Wikipedia-Artikel zu QR-Rechnungen [16].
Was drinsteht
Der EPC-QR-Code beinhaltet einen mehrzeiligen Text mit einheitlichem Zeilenumbruch, das heißt entweder LF (Line Feed) oder CRLF (Carriage Return und Line Feed), jedoch nicht beide Varianten gemischt. Die letzte Zeile des Texts darf nicht mit einem Zeilenumbruch abgeschlossen sein. Der kodierte Text umfasst Pflicht- und optionale Felder auf der Basis von einem Feld pro Zeile. Optionale Felder darf man nicht weglassen, sondern muss sie stattdessen durch eine Leerzeile repräsentieren. Die Tabelle “EPC-QR-Code (vereinfacht)” fasst den Inhalt und die Struktur der Implementation zusammen.
|
Zeile |
Feldname |
Pflichtfeld |
Wert |
Beschreibung |
|---|---|---|---|---|
|
1 |
Service Tag |
ja |
|
gefolgt von einheitlicher Zeilenschaltung (CR oder CRLF) |
|
2 |
Version |
ja |
|
Zahlungsverkehrsregion |
|
3 |
Character Set |
ja |
|
Encoding der Daten ( |
|
4 |
Identification |
ja |
|
SEPA Credit Transfer | SEPA Instant Credit Transfer |
|
5 |
BIC |
nur bei Version |
Text |
BIC der Empfängerbank |
|
6 |
Name |
ja |
Text |
Name des Empfängers |
|
7 |
IBAN |
ja |
Text |
IBAN des Empfängers |
|
8 |
Amount |
nein |
Text |
Betrag im Format |
|
9 |
Purpose |
nein |
Text |
Zahlungszweck gemäß SEPA (vierstelliger Textschlüssel) |
|
10 |
Remittance (Reference) |
nein |
Text |
Referenz (max. 25 Zeichen), Verwendung empfohlen |
|
11 |
Remittance (Text) |
nein |
Text |
Zahlungszweck (max. 140 Zeichen) |
|
12 |
Information |
nein |
Text |
Zusatztext (max. 70 Zeichen) |
Um besser zu verstehen, welchen Inhalt ein solcher QR-Code haben muss, bereiten wir eine Transaktion zugunsten der Initiative Feldhamsterverleih [17] vor, hier zur gezielten Verhinderung einer fiktiven Rennstrecke im Hochschwarzwald. Listing 1 zeigt die benötigten Inhalte für den QR-Code zu einer ausgestellten Rechnung mit der Referenz 20250015 über den Betrag von 123,45 Euro.
Beachten Sie bitte, dass als Trennzeichen zwischen Euro und Cent ein Punkt statt eines Kommas dient. Zwischen der Währungsangabe und dem Betrag steht kein Leerzeichen. Die Kommentarfelder in den Zeilen 11 und 12 blieben im Beispiel leer. Den erzeugten EPC-QR-Code lesen Sie mit einer geeigneten App ein und übertragen den hinterlegten Inhalt dann direkt in das Überweisungsformular Ihrer Banksoftware.
Listing 1
EPC-QR-Code
BCD 001 1 SCT BFSWDE33BER Initiative Feldhamsterverleih DE12345678901234567890 EUR123.45 RN 20250015 Rennstrecke Hochschwarzwald
EPC-QR-Code erzeugen
Zur Erzeugung des QR-Codes verwenden Sie das LaTeX-Paket Qrcode. Es bildet die Basis für Epcqrcode mit zusätzlichen Prüfschritten, beispielsweise für IBANs. Das bereits erwähnte, aber hier nicht verwendete Paket Pst-barcode [13] ist älter und benötigt PSTricks [18], was recht viel Overhead erzeugt.
Alle benötigten Pakete stehen über das Comprehensive TeX Archive Network (CTAN [19]) bereit. Verwenden Sie Debian GNU/Linux, dann haben Sie es noch leichter: Sie finden Qrcode und Pst-barcode im DEB-Paket texlive-latex-extra [20]. Epcqrcode steht derzeit nur via CTAN und über die Projektseite auf Github zur Verfügung.
Die maximale Payload des erzeugten QR-Codes beträgt 334 Bytes. Die laut Dokumentation zulässigen Zeichen umfassen Klein- und Großbuchstaben sowie Ziffern, jedoch weder Umlaute noch das ß. Als Sonderzeichen sind lediglich Punkt und Doppelpunkt, das Komma, das Hochkomma ('), das Fragezeichen, Plus und Minus, runde Klammern sowie der Schrägstrich / zulässig.
In Listing 2 sehen Sie den LaTeX-Code zur Erzeugung eines 2 mal 2 Zentimeter großen QR-Codes basierend auf den Inhalten von Listing 1. Auf die Präambel (Zeile 1) und die Einbindung des Pakets Qrcode (Zeile 2) sowie dem Beginn des LaTeX-Dokuments (Zeile 3) folgen die Inhalte des QR-Codes analog zu Listing 1 (nach einer Idee von Jürgen Schwarze [21]). Zeile 17 schließt dann das LaTeX-Dokument ab.
Listing 2
QR-Code mit LaTeX
\documentclass{article}
\usepackage{qrcode}
\begin{document}
\qrcode{BCD
001
1
SCT
BFSWDE33BER
Initiative Feldhamsterverleih
DE12345678901234567890
EUR123.45
RN 20250015
Rennstrecke Hochschwarzwald
}
\end{document}
Analog dazu ist auch eine Schreibweise aus Schlüssel-Wert-Paaren zulässig (Listing 3), die wir der Dokumentation von Epcqrcode entnommen haben: Empfänger (name), IBAN (iban), BIC (bic), Wert (amount), Referenz (ref) und Grund der Transaktion (reason). Jedes Schlüssel-Wert-Paar schließen Sie mit einem Komma ab.
Listing 3
QR-Code (Variante)
\documentclass{article}
\usepackage{qrcode}
\begin{document}
\qrcode{
name=Initiative Feldhamsterverleih,
iban=DE12345678901234567890,
bic=BFSWDE33BER,
amount=123.45,
ref=RN 20250015,
reason=Rennstrecke Hochschwarzwald
}
\end{document}
Speichern Sie Ihren LaTeX-Code als Datei qrcode.tex ab und übersetzen Sie das File anschließend mittels Pdflatex. Sie erhalten den QR-Code, wie ihn Abbildung 1 zeigt. In Listing 4 sehen Sie einen Ausschnitt aus dem Übersetzungsprozess von Listing 2 mit den Daten, die dann im QR-Code stehen. Listing 5 zeigt das analog für Listing 3. Der daraus erzeugte QR-Code sieht dem aus Abbildung 1 recht ähnlich.

Abbildung 1: Mittels Qrcode erzeugter QR-Code.
Den QR-Code fügen Sie jetzt noch an der gewünschten Position in Ihre Rechnungsvorlage ein [22]. Im Idealfall verwenden Sie den LaTeX-Code analog zu Listing 2 oder Listing 3, alternativ nutzen Sie eine zuvor erzeugte Bilddatei. Achten Sie darauf, die Felder beziehungsweise Schlüssel-Wert-Paare stets mit den richtigen Werten zu befüllen.
Listing 4
Pdflatex-Aufruf (Ausschnitt)
$ pdflatex qrcode.tex
...
<Reading QR code for "BCD
001
1
SCT
BFSWDE33BER
Initiative Feldhamsterverleih
DE12345678901234567890
EUR123.45
RN 20250015
Rennstrecke Hochschwarzwald
" at level 8-M from aux file.>
...
Listing 5
Pdflatex-Aufruf (Variante)
$ pdflatex qrcode.tex
...
<Copying the QR code for "
name=Initiative Feldhamsterverleih,
iban=DE12345678901234567890,
bic=BFSWDE33BER,
amount=123.45,
ref=RN 20250015,
reason=Rennstrecke Hochschwarzwald,
" in version 9-M as previously calculated.>
...
Ausblick
Damit keine Diskrepanzen zwischen den Inhalten der drei Komponenten einer elektronischen Rechnung entstehen, ist etwas Programmierung hilfreich, entweder in den Makros der benutzten LaTeX-Pakete oder als Wrapper drumherum. Mit diesen Details befassen wir uns im nächsten Teil dieser Artikelserie genauer. (jlu)
Der Autor
Frank Hofmann arbeitet zumeist von unterwegs aus als Entwickler, Trainer und Autor. Bevorzugte Arbeitsorte sind Berlin, Genf und Kapstadt. Er gehört zu den Verfassern des Debian-Paketmanagement-Buchs [23].
Infos
- ZUGFeRD/XRechnung (Teil 1): Frank Hofmann, “Holpriger Galopp”, LU 06/2025, S. 16, https://www.linux-community.de/51811
- ZUGFeRD/XRechnung (Teil 2): Frank Hofmann, “Flink davongetrabt”, LU 06/2025, S. 22, https://www.linux-community.de/51936
- Revisionssichere Datenablage: Frank Hofmann, “Strenger Wächter”, LU 06/2025, S. 28, https://www.linux-community.de/51386
- XRechnung: Tobias Eggendorfer, “Verrechnet”, LM 04/2025, S. 50, https://www.lm-online.de/51967
- Scan2Pay: https://www.scan2pay.info/de/
- EcoCash: https://www.ecocash.co.zw/
- M-Pesa Scan-To-Pay: https://www.safaricom.co.ke/annualreport_2018/safaricom-qr-code.php
- Phishing-Opfer verliert vor Landgericht und muss Rechnung zahlen: https://www.heise.de/news/Landgerichtsurteil-Wer-haftet-bei-Phishing-mit-manipulierten-E-Mails-10420964.html
- “EAN, ISBN und QR Codes in LaTeX setzen”: https://www.namsu.de/Extra/pakete/Codes/Codes.html
- QR- und Barcode in LibreOffice einfügen: https://help.libreoffice.org/latest/de/text/shared/01/qrcode.html
- LaTeX-Paket Qrcode: https://ctan.org/pkg/qrcode
- LaTeX-Paket Epcqrcode: https://ctan.org/pkg/epcqrcode
- LaTeX-Paket Pst-barcode: https://ctan.org/pkg/pst-barcode
- EPC-QR-Code: https://de.wikipedia.org/wiki/EPC-QR-Code
- Europäischer Zahlungsverkehrsausschuss: https://www.europeanpaymentscouncil.eu/
- QR-Rechnungen: https://de.wikipedia.org/wiki/QR-Rechnung
- Feldhamsterverleih: https://de.wikipedia.org/wiki/Feldhamsterverleih
- PSTricks: https://tug.org/PSTricks
- CTAN: https://ctan.org
- DEB-Paket texlive-latex-extra: https://packages.debian.org/bookworm/texlive-latex-extra
- “Mit LaTeX einen EPC-QR-Code (GiroCode) erzeugen”: https://j5s7.de/posts/epc-qr-code/
- Rechnungen mit LaTeX: Daniel Tibi, “Die Rechnung, bitte”, LU 10/2020, S. 24, https://www.linux-community.de/45219
- Axel Beckert, Frank Hofmann: Debian-Paketmanagement-Buch: https://dpmb.org/





