Tag 01 — Point of Initiation
11 = static QR (reusable, you enter the amount yourself).12 = dynamic QR (one-shot, amount pre-filled by the merchant POS).
Standards · EMVCo merchant payment QR
The QR on a restaurant table or parking meter or market stall almost always runs on EMVCo's TLV format. It carries the merchant name, city, country, currency, optional amount, and a CRC-16 checksum that fails if the payload was altered. The sticker-swap attack — covering a real merchant's QR with the attacker's QR — is the most common QR fraud worldwide. Decoding the QR before you pay shows you who you're actually paying.
The standard is EMVCo QR Code Specification, published by the same EMVCo consortium that defined chip-and-pin cards. Two flavors share most of the format:
Almost every country's instant-payment scheme is built on top of EMVCo MPM with a few country-specific tags layered on:
The format is Tag-Length-Value text, no encryption, decodable by any QR scanner. The merchant identity is encoded in plain text and is what your wallet app displays.
Every EMVCo payload starts with 000201 (Payload Format Indicator). What follows is a sequence of TLV records — two-character tag, two-digit length, value of that length, repeated.
11 = static QR (reusable, you enter the amount yourself).12 = dynamic QR (one-shot, amount pre-filled by the merchant POS).
Country-specific recipient identifier. Pix Key (CPF / CNPJ / email / phone / EVP UUID), UPI Virtual Payment Address, PromptPay phone or national ID, etc.
ISO 18245 4-digit category. 5812 = restaurant, 5411 = grocery, 7011 = lodging, 5541 = gas station, etc.
ISO 4217 numeric code. 840 = USD, 978 = EUR, 826 = GBP, 986 = BRL (Brazilian real), 356 = INR (Indian rupee).
Optional. Present in dynamic QRs (the merchant pre-filled it), absent in static QRs (you enter it yourself).
Optional. 55 indicates whether a tip prompt should appear; 56 / 57 carry a fixed-amount or percentage convenience fee.
ISO 3166-1 alpha-2 country code. Useful when payment apps support cross-border transfer.
Up to 25 chars. This is the field your wallet app displays as "you're paying ___". The merchant fully controls what goes here. An attacker who creates a sticker-swap puts whatever string they want here.
Up to 15 chars. Where the merchant is located.
Optional but useful for fraud-detection: a US merchant whose postal code doesn't match the city is a flag.
Sub-TLV. Inside: bill number, mobile number, store label, loyalty number, reference label, customer label, terminal label, purpose of transaction.
CRC-16/CCITT-FALSE over everything preceding (including the "6304" header of the CRC TLV itself). If this doesn't match, the QR was altered or corrupted.
The technique is depressingly simple:
The merchant doesn't notice until the day's reconciliation shows the takings are short. The customer doesn't notice because their wallet says "you paid ${attacker_chosen_string}" — and the attacker can put the merchant's real name in tag 59. Or close to it ("Joe's Pizz4", "Joe's Pizzeria 2") — slight variations that a busy customer doesn't catch.
The fraud has been documented in every country where mobile payments are prevalent: Brazil (Pix sticker-swap at parking meters), India (UPI sticker-swap at petrol pumps), China (WeChat Pay sticker-swap on shop windows), Singapore (PayNow at hawker centres), UK (donation-box QR-swap), US (parking meters in Austin, San Francisco, LA).
What our scanner shows you:
Physical clues to inspect before scanning:
Our analyzer recognizes the country tag and labels the verdict with the local scheme name when one applies. Currently covers 54 countries including all the major instant-payment systems. See the standards hub for the full list with per-scheme details.
Drop the QR into our scanner. The verdict shows merchant, city, country, amount, currency, and whether the CRC checksum is valid. Takes a few seconds. Could save you the cost of dinner — or an entire month's parking budget.