EMVCo merchant QR

The EMVCo QR Code Specification is the TLV-encoded format that sits underneath most national mobile-payment schemes — PIX (Brazil), PromptPay (Thailand), UPI (India), SGQR (Singapore), DuitNow (Malaysia), BPS PayNow (Singapore), and many others. Understanding the EMVCo base format means understanding a dozen regional derivatives at once.

Canonical spec: EMV QR Code Specification for Payment Systems — Merchant Presented Mode v1.1 (2020) and Consumer Presented Mode v1.1 (2020).
Encoding: TLV (Tag-Length-Value) with 2-digit tags, 2-digit lengths, variable value. CRC16-CCITT trailer for integrity.

Merchant Presented vs Consumer Presented

MPM structure

MPM payload is a flat sequence of TLV records terminated by a CRC:

TagNameLengthNotes
00Payload format indicator2Always 01.
01Point of initiation method211 static / 12 dynamic.
0251Merchant account informationvariableScheme-specific. Each scheme reserves its own tag: PIX uses 26, UPI uses 26 too, SGQR uses 51.
52Merchant Category Code (MCC)4ISO 18245 4-digit code. See table below.
53Transaction currency3ISO 4217 numeric. 840=USD, 978=EUR, 356=INR, 986=BRL, 764=THB.
54Transaction amountvariableDecimal as string. Omit for static amount-at-scan QRs.
58Country code2ISO 3166 alpha-2.
59Merchant namevariableMax 25 chars per spec; many schemes relax this.
60Merchant cityvariableMax 15 chars.
62Additional data field templatevariableBill reference, loyalty, terminal ID.
63CRC4CRC16-CCITT over everything before this tag (including the tag itself, length 04, minus the 4-digit value).

Regional schemes that derive from EMVCo

SchemeCountryMerchant account tagNotes
PIXBrazil26Brazilian Central Bank instant-payment scheme. Adds CPF/CNPJ/email/phone PIX keys as sub-TLVs under tag 26.
PromptPayThailand29 / 30Uses 29 for national ID / tax ID and 30 for mobile number.
UPIIndia26Same EMVCo base with UPI-specific sub-TLVs (VPA, payee name).
SGQRSingapore51Unified QR that encodes multiple payment rails (PayNow, NETS, UOB Pay) simultaneously.
DuitNowMalaysia27PayNet's national instant payment scheme.
FPSHong Kong27Faster Payment System by HKICL.
JPQRJapan50METI-backed unified Japanese QR standard.

Common MCC codes

MCCMerchant category
5411Grocery stores, supermarkets
5812Eating places, restaurants
5814Fast-food restaurants
5999Miscellaneous retail
7230Beauty / barber shops
8011Doctors
8398Charitable / social service organisations
0000Unknown / placeholder (spec allows this)

Canonical test vectors

CaseInputsExpected TLV head
Static MPM, USD, no amountmerchant=Acme Corp
city=LAS VEGAS
country=US
currency=840
mcc=5999
00020101021152045999...53037405802US5909Acme Corp6009LAS VEGAS
Dynamic MPM, EUR, amount 25.00(same)
amount=25.00
Starts 000201010212 (POI method 12 = dynamic), includes 540525.00.
Restaurant bill, INR 250, MCC 5812merchant=Spice House
city=MUMBAI
country=IN
currency=356
mcc=5812
amount=250
MCC field: 52045812. Currency: 5303356.

Common pitfalls

Scanner compatibility

App / deviceSupportNotes
Banking / wallet appNativeRegional apps in each country (Nubank / UPI apps / TrueMoney / GrabPay) parse the EMVCo payload natively.
iOS CameraRaw stringNot recognised as payment. User must open their banking app and scan from there.
Android CameraRaw stringSame — not parsed.
Google LensRaw stringDisplays decoded text.
Industrial payment terminalsNativeModern POS scanners include EMVCo parsing in firmware for the regional scheme(s) they support.

See also

Spec version verified 2026-04-18 (EMVCo MPM v1.1 / CPM v1.1). Next review: 2026-07-18.