QR Platba: how the Czech payment QR code works
QR Platba is the Czech standard for payment QR codes, published by the Czech Banking Association as the Short Payment Descriptor (SPAYD). The code holds a short text with the payee's IBAN, the amount, the currency and the variable symbol. The payer's banking app reads it and fills in a payment order for the payer to check and confirm.
Updated: · By Stepan Talalayev
How a QR Platba string is built
The current version of the ČBA standard is 1.2, issued on 1 June 2021 and effective from 1 January 2022. A payment order starts with the header SPD* (short payment descriptor), then the protocol version, two numbers separated by a dot (1.0*). Each field follows as key:value*, so a value ends with an asterisk and may not contain one; an asterisk inside a value is written as %2A.
- Keys are upper-case letters and hyphens. Keys that start with X- are the Czech extensions, such as the variable symbol.
- The standard recommends using only 0–9, A–Z, space and $ % * + - . / : so that the QR code can use its compact alphanumeric mode.
- For printed media the QR code should use error correction level M, which can restore 15 % of the code.
- A string that starts with SCD* instead is a direct-debit authorisation, not a payment order.
The fields
| Key | Meaning | Format | Example | Written by DigiTale Invoice |
|---|---|---|---|---|
| ACC | Payee's account | IBAN, optionally followed by + and the BIC; up to 46 characters. The only required field | ACC:CZ1755000000000125337002 | Yes, always (IBAN without BIC) |
| AM | Amount | Decimal number with a dot and at most 2 decimals, up to 10 characters (at most 9 999 999.99) | AM:36179.00 | Yes, when the invoice total is above zero |
| CC | Currency | Exactly 3 letters (ISO 4217). The standard currently allows only CZK | CC:CZK | Yes, always: the invoice currency |
| X-VS | Variable symbol | Whole number, up to 10 digits | X-VS:20260142 | Yes, when filled in |
| X-KS | Constant symbol | Whole number, up to 10 digits | X-KS:0308 | Yes, when filled in |
| X-SS | Specific symbol | Whole number, up to 10 digits | X-SS:1234567890 | No |
| MSG | Message for the payee | Up to 60 characters | MSG:PLATBA ZA ELEKTRINU | No (only the homepage sample has one) |
| DT | Due date | Exactly 8 digits, YYYYMMDD (ISO 8601) | DT:20210430 | No |
| RN | Payee's name | Up to 35 characters | RN:PETR DVORAK | No |
Table 3 of the standard lists the fields that any bank in the Czech Republic can process for a domestic payment order: ACC (one account only), AM, CC (CZK only), DT, MSG, X-VS, X-SS and X-KS. Other fields, RN among them, are processed only by some banks.
A real QR Platba string, decoded
This is the exact text in the QR code on the sample invoice on the DigiTale Invoice homepage, for a CZK invoice with 21 % VAT. It points at DigiTale's own account, so its message asks you not to pay.
SPD*1.0*ACC:CZ1755000000000125337002*AM:36179.00*CC:CZK*X-VS:20260142*MSG:UKAZKA - NEPLATIT / SAMPLE - DO NOT PAY| Part | Value | What it means |
|---|---|---|
| SPD | SPD | Header: a QR Platba payment order |
| Version | 1.0 | Protocol version |
| ACC | CZ1755000000000125337002 | IBAN of account 125337002/5500 |
| AM | 36179.00 | Amount: 36 179,00 Kč |
| CC | CZK | Currency |
| X-VS | 20260142 | Variable symbol, from invoice number 2026-0142 |
| MSG | UKAZKA - NEPLATIT / SAMPLE - DO NOT PAY | Message for the payee |
QR Platba, QR Faktura and the EPC (SEPA) QR code
| Standard | Published by | What the code carries | On DigiTale invoices |
|---|---|---|---|
| QR Platba (SPAYD) | Czech Banking Association | Payment details for a CZK payment order; starts with SPD* | CZK invoices with a bank account |
| QR Faktura | Chamber of Tax Advisers of the Czech Republic, presented with the Financial Administration on 14 June 2016 | Basic accounting data from the invoice, such as its number, issue and due dates, DUZP, tax base and VAT. It can be combined with QR Platba so the invoice has a single code | Not written |
| EPC QR code (EPC069-12) | European Payments Council | Data for a SEPA credit transfer in euros; starts with BCD | EUR invoices that have an IBAN and the supplier's name |
The EPC guideline (version 3.1, issued and effective 19 March 2024) is informative, and implementing it is optional for payment service providers, so whether a code scans depends on the payer's bank. Its main lines are the service tag BCD, the version (001 or 002), the character set, the code SCT, the BIC (optional in version 002 within the EEA), the beneficiary's name of up to 70 characters, the IBAN, an amount in euros from 0.01 to 999999999.99, a purpose code, and a reference: structured (up to 35 characters) or free text (up to 140).
Which banking apps read QR Platba
The QR Platba project site lists the banks that support the format, among them Česká spořitelna, ČSOB, Komerční banka, Fio banka, Air Bank, Raiffeisenbank and MONETA Money Bank. The EPC code is a different matter: support for it is optional, so check with your client's bank if they pay in euros.
How DigiTale Invoice writes the code
- An invoice gets a code when the payment method is a bank transfer, payment details are switched on and the QR option is on.
- EUR invoices with an IBAN and your company name get the EPC code: version 002, UTF-8, your BIC if you entered one, your name cut to 70 characters, and the variable symbol in the reference line meant for a structured creditor reference.
- Every other invoice gets QR Platba: SPD*1.0*, then ACC, AM with two decimals, CC, and X-VS and X-KS when you fill them in. It writes no MSG, DT or RN.
- The QR Platba standard allows only CZK in CC. DigiTale Invoice writes the invoice's own currency there, so on an invoice in another currency a bank may reject the code; for those, rely on the bank details printed on the invoice.
- The QR code is generated with error correction level M, as the ČBA standard recommends for print.
How the IBAN is calculated from a Czech account number
A Czech IBAN has 24 characters: CZ, two check digits, and 20 digits made of the bank code and the account number, as the Czech National Bank describes. If you leave the IBAN field empty, DigiTale Invoice builds it for the QR code from your account number and bank code:
- Pad the bank code to 4 digits, the account prefix (the part before the hyphen, 0 if there is none) to 6 digits and the account number to 10 digits, all with leading zeros.
- Join them into a 20-digit number: bank code, prefix, account number.
- Append 123500, which stands for the letters CZ (C = 12, Z = 35) followed by 00, and take the remainder after dividing by 97.
- The check digits are 98 minus that remainder, written with two digits. The IBAN is CZ, the check digits and the 20-digit number.
| Account number | IBAN |
|---|---|
| 19-2000145399/0800 | CZ65 0800 0000 1920 0014 5399 |
| 178124-4159/0710 | CZ69 0710 1781 2400 0000 4159 |
| 125337002/5500 | CZ17 5500 0000 0001 2533 7002 |
The calculated IBAN only goes into the QR code. The invoice prints your account number and bank code, and the IBAN only if you typed it in; an IBAN you type is used in the code as typed, without spaces.
Enter your account number and bank code, and the code is added to the PDF.Create an invoice with a QR code
This guide explains the rules in general terms. It isn't tax or legal advice; for your own situation, ask a tax adviser.
Sources
- Czech Banking Association (ČBA): Format for sharing payment information in CZK – QR codes (checked )
- ČBA standard, version 1.2 (June 2021, effective 1 January 2022), PDF in Czech (checked )
- European Payments Council: EPC069-12 version 3.1, Quick Response Code guidelines (PDF) (checked )
- Chamber of Tax Advisers of the Czech Republic (KDP ČR): QR Faktura (checked )
- Czech National Bank: IBAN, the international account number format (checked )
- qr-platba.cz: QR Platba project site, list of supporting banks (checked )
Related guides
- What a Czech invoice must contain
What a Czech invoice must contain under § 29 of the VAT Act and § 435 of the Civil Code, with DUZP, VAT rates, numbering, due dates and how long to keep invoices.
- SEPA QR code on invoices: how the EPC QR code works
What the SEPA (EPC) QR code on an invoice is, every field of EPC069-12 with what DigiTale Invoice writes, a decoded example, the BIC rule, euro-only use and how it differs from QR Platba.