Die Antwort in Kürze
Was zu erzeugen ist
Eine QR-Rechnung zu erzeugen heisst, drei getrennte Verarbeitungsschritte zu verketten.
| Schritt | Inhalt | Normative Referenz |
|---|---|---|
| 1. Daten | Die Zeichenkette von rund 30 Zeilen aufbauen: Header SPC / 0200 / 1, Zahlungsempfänger, Betrag, Zahlungspflichtiger, Referenz, Informationen, EPD, S1, alternative Verfahren |
Implementation Guidelines, Kapitel 4 |
| 2. Code | Die Zeichenkette als QR-Code nach ISO 18004 kodieren, Stufe M, UTF-8, kleinste Version, dann das Schweizer Kreuz einfügen; vektoriell exportieren | Implementation Guidelines, Kapitel 6 |
| 3. Layout | Empfangsschein und Zahlteil gestalten: Zonen, Schriften, Grössen, Bezeichnungen in der gewählten Sprache, leere Felder mit Eckmarken, Scherensymbol oder Perforation | Style Guide |
Der Leitfaden zum Swiss QR Code erläutert die Datenstruktur und liefert ein vollständiges Payload.
Die Open-Source-Bibliotheken
Alle nachstehenden Bibliotheken erzeugen den vollständigen Zahlteil (oft als SVG oder PDF) und nicht nur den Code. Prüfen Sie vor der Wahl das Datum der letzten Version und die Unterstützung ausschliesslich strukturierter Adressen (Version 2.3).
| Sprache | Bibliothek | Stärken |
|---|---|---|
| Java | SwissQRBill (manuelbl) | Erzeugung und Dekodierung, vollständige Validierung, Ausgabe als SVG, PDF und PNG, gemeinsam mit der .NET-Version entwickelt |
| .NET | SwissQRBill.NET (manuelbl) | Gleiche API wie die Java-Version, Integration in Windows-ERP |
| PHP | php-swiss-qr-bill (sprain) | Sehr verbreitet in Schweizer Onlineshops und Webanwendungen, Ausgabe als HTML, SVG und PDF (FPDF, TCPDF) |
| Python | swiss-qr-bill (claudep) | Kommandozeile und Klasse QRBill, SVG-Ausgabe, Django-Integration |
| JavaScript / TypeScript | swissqrbill (schoero) | Node.js und Browser, Ausgabe als SVG und PDF (PDFKit), nützlich für Portale und Webanwendungen |
| LaTeX | qrbill (CTAN) | Für in LaTeX gesetzte Rechnungen |
| Typst | payqr-swiss | Für Typst-Dokumente |
Diese Projekte werden von der Community gepflegt, die meisten unter MIT-Lizenz. Keines ist von SIX zertifiziert, das niemanden zertifiziert: Validiert wird Ihre Ausgabe, nicht die Bibliothek.
Fallstricke bei der Implementierung
Daten
- Adressen: Nur strukturierte Adressen (Typ S) sind zulässig; Strasse und Hausnummer sind zwei Elemente, die Postleitzahl steht ohne Land, das Land ist ein Code nach ISO 3166-1. Ein Zahlungspflichtiger ist entweder vollständig oder fehlt ganz (leere Gruppe).
- Paar Konto–Referenz: Lehnen Sie bei der Erzeugung
QRRohne QR-IBAN (IID 30000–31999) sowieSCORoderNONmit einer QR-IBAN ab. Seit der Version 2.4 lehnen Sie auchQRRin EUR ab. - Referenzen: 27 Ziffern für die QR-Referenz, Prüfziffer Modulo 10 rekursiv berechnet und nicht eingegeben; 5 bis 25 Zeichen für die Creditor Reference, Prüfung Mod 97-10; Kodierung ohne Leerzeichen.
- Betrag: Dezimalzeichenkette mit Punkt, zwei Nachkommastellen, ohne Tausendertrennzeichen und ohne führende Nullen; zwischen 0.01 und 999999999.99.
- 140 Zeichen, geteilt zwischen
UstrdundStrdBkgInf: Kürzen Sie den Freitext, nie S1. - Zeichensatz: Filtern oder ersetzen Sie Zeichen ausserhalb des zulässigen lateinischen Zeichensatzes vor der Kodierung; Emojis und exotische typografische Anführungszeichen sind in von Kunden eingegebenen Namen häufig.
- Endgültiger Zahlungsempfänger: sieben leere Zeilen; füllen Sie diese Gruppe nie aus.
Code
- Fehlerkorrekturstufe M erzwungen, unabhängig vom Standardwert der QR-Bibliothek.
- Kleinstmögliche Version, dann vektorielle Skalierung auf 46 × 46 mm; nie als Bitmap.
- Schweizer Kreuz gemäss der Vorlage von SIX, zentriert; die spezialisierten Bibliotheken fügen es ein.
- Weisser Rand von 5 mm um den Code im Zahlteil.
Layout
- Schriften Arial, Frutiger, Helvetica oder Liberation Sans, im PDF eingebettet (Liberation Sans ist frei und metrisch kompatibel mit Arial).
- Bezeichnungen aus Anhang D der Implementation Guidelines, in den fünf Sprachen, nie frei übersetzt.
- Titel ausgeblendet, wenn der Wert fehlt; schwarze Eckmarken für leer gelassenen Betrag oder Zahlungspflichtigen.
- Trennlinie und Scherensymbol im PDF; Positionen auf die Perforation des Papiers abgestimmt.
Testen
- Unit-Tests der Prüfziffern (QR-Referenz, Creditor Reference, IBAN) mit bekannten Werten:
210000000003139471430009017ist gültig,RF18539007547034ist gültig,CH4431999123000889012ist eine QR-IBAN. - Regressionstests: den dekodierten Text des Codes für jeden Rechnungsfall (freier Betrag, fehlender Zahlungspflichtiger, EUR, S1, alternatives Verfahren) mit einer Referenz vergleichen.
- Validieren Sie Swiss-QR-Code-Daten mit SIX-Werkzeugen in den unterstützten Formaten. Prüfen Sie das endgültige PDF und den Ausdruck separat anhand des Style Guides und testen Sie anschliessend Bankverarbeitung und Abgleich.
- Swico-Validator für die S1-Syntax.
- Echter Scan in zwei Banking-Apps, am Bildschirm und auf Papier.
Den Standard verfolgen
SIX veröffentlicht Änderungen der Implementation Guidelines zusammen mit dem Zeitplan ihrer Einführung. Abonnieren Sie die Ankündigungen des Download-Centers, lesen Sie die Änderungsdokumentation und planen Sie die Aktualisierung der Bibliothek und Ihrer Tests. Der Leitfaden zu den Versionen fasst die laufenden Termine zusammen: Version 2.4 am 14. November 2026, Ende der Weiterführung der 2.3 im November 2027.
Quellen und Referenzen
- SIX Interbank Clearing, Schweizer Implementation Guidelines QR-Rechnung, Version 2.3, Kapitel 4 (Daten) und Kapitel 6 (Parameter des Codes). ↗
- SIX, Validierungsportal QR-Rechnung. ↗
- SwissQRBill (Java) und SwissQRBill.NET, Manuel Bleichenbacher, MIT-Lizenz. ↗
- php-swiss-qr-bill (PHP), Manuel Reinhard, MIT-Lizenz. ↗
- swiss-qr-bill (Python), Claude Paroz, MIT-Lizenz. ↗
- swissqrbill (JavaScript, Node.js und Browser), Roger Schönbächler, MIT-Lizenz. ↗
- Swico, Supportmaterial und Validator für Entwickler (swiss-qr-invoice.org). ↗