Swiss QR-bill
The Swiss QR-bill replaced the Swiss orange and red inpayment slips in July 2020. It's an ISO 20022 Customer Credit Transfer Initiation (pain.001) payload rendered as a QR with a mandatory Swiss-cross overlay in the centre. Every Swiss bank accepts it; no Swiss bank accepts anything else.
ISO basis: ISO 20022
pain.001 Customer Credit Transfer Initiation.Mandatory since: 1 July 2020. Legacy orange/red inpayment slips phased out 30 September 2022.
What it is
The payload is a newline-separated (CRLF) list of 32 fields arranged in seven blocks:
QRType → Always "SPC" Version → 0200 (v2.3) Coding → 1 (Latin-1) [Creditor Information] ← 7 fields (IBAN + address) [Ultimate Creditor] ← 7 fields (optional, usually empty) [Payment Amount Information] ← 3 fields (amount, currency, due date) [Ultimate Debtor] ← 7 fields (optional) [Payment Reference] ← 2 fields (reference type + reference) [Additional Information] ← 2 fields (unstructured message + bill info) [Alternative Procedures] ← 2 fields (optional, rarely used)
The resulting QR sits inside a "Payment part" block on the bottom third of the invoice. Every Swiss banking app (UBS, ZKB, PostFinance, Raiffeisen, Neon, Yuh, Revolut CH) reads it natively.
QR-IBAN vs regular IBAN
A "QR-IBAN" is a special Swiss IBAN where the 5-digit bank code range is 30000–31999. QR-IBANs require a structured QR reference (QRR, 27 digits, mod-10 check). Regular Swiss IBANs accept creditor reference (SCOR, RFC 8905) or no reference.
| Creditor IBAN type | Valid reference types | Notes |
|---|---|---|
| QR-IBAN (bank code 30000–31999) | QRR (27-digit, mod-10) | Required. SCOR and NON are invalid. |
| Regular IBAN (CH or LI) | SCOR or NON | QRR is invalid — QR-IBAN only. |
Canonical test vectors
| Case | Inputs | Reference type |
|---|---|---|
| Minimal (regular IBAN, no amount, no reference) | iban=CH9300762011623852957 | NON |
| Regular IBAN with amount + unstructured message | (same as above)amount=100.00 | NON |
| QR-IBAN with QRR reference | iban=CH4431999123000889012 | QRR |
| Liechtenstein IBAN | iban=LI0508800000021904015 | NON |
Live Swiss IBAN validator
The validator below checks the three Swiss-specific rules: (1) country code is CH or LI, (2) length is exactly 21, (3) ISO 7064 mod-97 checksum passes. Pasted input is normalised (case, spaces stripped).
Common pitfalls
- Wrong reference type for the IBAN type. A QR-IBAN with a NON or SCOR reference is rejected at the bank. A regular IBAN with a QRR reference is also rejected. Abundera auto-selects the right type; hand-built encoders often get this wrong.
- Missing Swiss-cross overlay. The QR-bill spec requires a 7mm × 7mm Swiss flag (white cross on red, with a 1mm white border) centred on the QR. This is not optional — banking OCR pipelines use it as a QR-bill signature. Abundera overlays it automatically.
- QR module error correction level. The spec requires ECC level M. Higher or lower ECC levels render a QR that looks right but rejects at the bank.
- Address field length. Creditor name, street, postal, city — each capped at 70 Latin-1 characters. Over-length strings get silently truncated by some encoders, which breaks reconciliation.
- Currency CHF or EUR only. The QR-bill supports only two currencies. Every other currency is rejected.
- Reference mod-10 vs mod-97. QRR references use a mod-10 recursive checksum (Luhn-variant). Not to be confused with the mod-97 IBAN checksum. Hand-rolled reference generators often Luhn-check the wrong way.
- Latin-1, not UTF-8. Field
Codingis "1" = Latin-1. Non-Latin-1 characters (ä/ö/ü survive; Cyrillic/Chinese don't) break some older banking apps.
Scanner compatibility
| Reader | Support | Notes |
|---|---|---|
| UBS Mobile / PostFinance / ZKB app | Native | Every Swiss banking app reads QR-bills natively. |
| Neon / Yuh / Revolut CH | Native | Neobanks handle the full pain.001 payload. |
| iOS Camera | No | iOS treats a QR-bill as a raw string — no parsing. User must open a banking app. |
| Android Camera / Google Lens | No | Same — no native parsing. |
| Commercial OCR (e.g. bill-pay services) | Yes | Banking-grade OCR tooling reads QR-bills into AP/AR pipelines. |
See also
- /swiss-qr-bill-generator/ — the generator with IBAN validation inline.
- /standards/ — back to the standards index.
- SIX Implementation Guidelines — the authoritative spec.