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.