swissinvoice.dev

Swiss QR-bill validator

Paste the raw content of a Swiss QR code, or drop a PDF or image of a QR-bill. Every field is checked against the SIX Implementation Guidelines (v2.3, including the v2.4 changes from November 2026).

What we check

  • ✓Header: QR type SPC, version 0200, coding type 1
  • ✓IBAN checksum, CH/LI only, QR-IBAN vs. normal IBAN
  • ✓Reference: QRR check digit (modulo 10, recursive), SCOR (ISO 11649) checksum, NON is empty
  • ✓Creditor and debtor addresses: structured (S) only since November 2025, required fields, field lengths, country code
  • ✓Amount format and range, currency CHF or EUR
  • ✓QR-IBAN and QR reference only in CHF (IG v2.4, from 14 November 2026)
  • ✓Message and bill information length (max. 140 combined), alternative schemes (max. 100)
  • ✓Character set, line count, trailer EPD and the 997-character limit

Use it from code

Same checks, as a free JSON API. No key needed, rate-limited per IP. Full API docs →

curl
curl -X POST https://swissinvoice.dev/api/v1/qr-bill/validate \
  -H "Content-Type: text/plain" \
  --data-binary @payload.txt

Frequently asked questions

How do I get the text inside a QR-bill?

+

Drop the PDF or a photo of the bill on this page — we decode the QR code in your browser. Alternatively, scan it with any QR scanner app and paste the text. The payload always starts with the line SPC.

Are combined addresses (type K) still allowed?

+

No. Since 21 November 2025, Swiss banks only accept structured addresses (type S) with separate postal code and town. Bills with type K addresses are rejected, so this validator reports them as errors.

What is the difference between a QR-IBAN and a normal IBAN?

+

A QR-IBAN has an institution ID (positions 5–9) between 30000 and 31999. It must be used with a 27-digit QR reference (QRR). A normal IBAN is used with a creditor reference (SCOR) or without reference (NON).

Why does my QR reference fail the checksum?

+

The last of the 27 digits is a check digit calculated with the recursive modulo-10 algorithm. If you build references yourself, the error message tells you which check digit is expected.

Is my data stored?

+

No. Uploaded files are decoded locally in your browser. The decoded text is sent to our API for validation and is not stored.

Need complete invoices, not just the QR part?

Magic Heidi creates QR-bill invoices, tracks payments and expenses — on iPhone, Android, Mac and web.

Try Magic Heidi →