In plain terms: a payment QR code is a bank transfer form folded into a square. Scan it and your payment app fills in who gets paid, how much and why, so you only tap to confirm. Nothing about the code is special; what is special is the text inside, which follows a format a particular payment system understands. This article maps the main formats and shows one in full.
Two directions
Every payment QR scheme works one of two ways, and EMVCo, the body owned by the big card networks, has given them names (EMVCo):
Merchant-presented mode. The shop shows a code, printed on a card by the till or generated on a screen, and the customer scans it with a payment app. The code carries the merchant’s account identifier and often the amount. This is the sticker on the market stall in Bengaluru, the laminated card at the noodle counter in Chengdu, the code on the bottom of a German electricity bill. It suits small merchants because a printed static code costs nothing.
Consumer-presented mode. The customer’s app shows a code and the shop scans it. The code is a one-time token that stands for the customer’s account, so it is useless to anyone who photographs it. This is the mode in supermarkets with barcode scanners, and it is how Alipay and WeChat Pay work at large retailers.
EMVCo published its QR Code Specification for Payment Systems (QRCPS) in both modes, current version 1.1 dated 27 November 2020. Its purpose is interoperability: one code can carry several payment options, card-based and account-based, so a tourist’s wallet and a local’s bank app can both read it.
The national schemes
China: Alipay and WeChat Pay. Alipay introduced QR payments in 2011 and WeChat Pay followed, with Tenpay built into WeChat in 2013. A 2019 CGAP study found the two apps controlled about 93% of China’s mobile payment market, almost all of it via QR (CGAP). Both merchant-presented (the printed sticker) and consumer-presented (the customer’s screen) are everywhere.
India: UPI. The Unified Payments Interface, run by the National Payments Corporation of India, launched in April 2016 (Wikipedia). A UPI merchant code carries a upi://pay?pa=... address with the payee’s virtual payment address and name. RBI data show 657.9 million UPI QR codes deployed by the end of FY25, up 91.5% in a year (Business Standard). Bharat QR, launched in 2017, is the card networks’ interoperable merchant code for the same market (Mintoak).
Brazil: Pix. The Central Bank of Brazil launched Pix in November 2020. A Pix code can be static, carrying the payee key, or dynamic, carrying a one-time payload generated for a specific bill. By the end of 2024 Pix accounted for 47% of financial transactions in Brazil (Wikipedia).
Singapore: PayNow. Launched by the Association of Banks in Singapore on 10 July 2017, with QR payment as an option, and since linked to Thailand’s PromptPay, Malaysia’s DuitNow and India’s UPI for cross-border transfers (Wikipedia).
Bitcoin: BIP 21. Not a national scheme but the same idea. BIP 21, written by Nils Schneider and Matt Corallo in January 2012, defines a bitcoin: URI with optional amount, label and message, and almost every wallet renders it as a QR code. It has since been superseded by BIP 321 (GitHub).
| Feature | UPI | Pix | Alipay / WeChat | PayNow | EPC QR | Swiss QR-bill |
|---|---|---|---|---|---|---|
| Region | India | Brazil | China | Singapore | Euro area | Switzerland |
| Launched | 2016 | 2020 | 2011 / 2013 | 2017 | 2013 | 2020 |
| Mode | Both | Merchant | Both | Merchant | Merchant (invoice) | Merchant (invoice) |
| Operator | NPCI | Central Bank of Brazil | Ant Group / Tencent | ABS | EPC | SIX |
| Instant settlement | ✓ | ✓ | ✓ | ✓ | Bank dependent | Bank dependent |
Europe: the EPC QR code
Europe’s answer is older and simpler. Since 2013 the European Payments Council’s guideline EPC069-12 has defined a QR code for SEPA credit transfers, printed on invoices in Germany, Austria, Belgium, Finland and the Netherlands (Wikipedia). Your banking app reads it and fills in the transfer. It is merchant-presented, and it is a static code: everything is in the text.
The payload is twelve lines separated by line breaks. Here is a complete example for a 12.50 euro payment of an invoice. The bank details are dummies.
Raw payload
BCD 002 1 SCT EXAMDEFFXXX Example Bakery GmbH DE02120300000000202051 EUR12.50 GDDS Invoice 2026-118 Thank you for your order
-
BCDService tag. Always BCD. -
002Version. 002 allows the BIC to be left blank inside the euro area. -
1Character set. 1 means UTF-8. -
SCTIdentification. SEPA Credit Transfer. -
EXAMDEFFXXXBIC of the payee bank (dummy). May be empty with version 002. -
Example Bakery GmbHPayee name, up to 70 characters. -
DE02120300000000202051Payee IBAN (a test IBAN, not a real account). -
EUR12.50Amount with currency, 0.01 to 999999999.99. -
GDDSPurpose code (ISO 20022): purchase or sale of goods. -
Invoice 2026-118Unstructured remittance text, up to 140 characters. Used instead of a structured reference. -
Thank you for your orderInformation shown to the payer, up to 70 characters.
The field order matters and so do the limits. A generic generator will happily encode EUR12,50 with a comma; a banking app will reject it. That is why the EN 18184 post and every bank say the same thing: let the bank or the invoicing software generate live payment codes.
EN 18184:2025
The EPC QR only covered one direction and only ordinary transfers. On 31 December 2025 the European standards body CEN published EN 18184:2025, a single QR standard for SEPA credit transfers that covers both payee- and payer-presented codes and both standard and instant transfers, with a structure aligned to EMVCo’s merchant-presented format (Payment Expert). Existing EPC QR invoices keep working; the new standard adds the till-side cases. Our news post explains what changes for a business.
The Swiss QR-bill
Switzerland introduced the QR-bill on 30 June 2020 to replace its paper payment slips (SIX). It is a payment part carrying a Swiss QR Code with a Swiss cross in the centre. SIX, which runs the standard, publishes Implementation Guidelines. Version 2.4 was published on 23 February 2026 and enters into force on 14 November 2026; version 2.3 remains valid until November 2027. The change concerns euro invoices, which from 2.4 may only combine an IBAN with a structured SCOR reference or an unstructured message (SIX).
Three worked examples
- A market stall in India. A printed UPI sticker, merchant-presented, static. The stallholder’s phone pings when the customer pays. Cost to the merchant: one laminated card.
- A utility bill in Austria. An EPC QR printed at the bottom of the PDF. The customer opens their bank app, scans, checks the amount and taps. Static, merchant-presented, offline.
- A supermarket in Shanghai. The customer opens Alipay, shows a code, the till scans it. Consumer-presented, dynamic, one-time. The code changes every minute so a photograph of it is worthless.
In practice
If you sell to the public and want a payment code, get it from your bank or payment provider. If you want to understand what they gave you, paste it into the decoder. A UPI code starts upi://pay, an EPC code starts BCD, a Pix code starts 00020126, the EMVCo payload format indicator.
▸Why EMVCo and EPC payloads look so different
EPC069-12 predates EMVCo’s QR work and uses a fixed order of newline-separated fields, which is easy to read by eye and easy to get wrong by hand. EMVCo QRCPS uses tag-length-value encoding: each field is a two-digit tag, a two-digit length and the value, for example 5303978 for tag 53 (currency), length 03, value 978 (euro). Fields can appear in any order and unknown tags are skipped, which is what allows one code to carry several payment networks. Pix, PayNow’s SGQR, Bharat QR and EN 18184 all use the EMVCo layout; UPI uses a URI instead. All of them end with a CRC checksum so a damaged code is rejected rather than mis-paid. The encoding article explains how any of these strings becomes squares.
Try it yourself
Use the payload builder to assemble an EPC-style string with dummy details and see how each extra line raises the version. Then compare the module count with a short upi:// address.