EMV QR Hub
EMV QR Hub
Developer Resources

How to Generate a Merchant EMV QR

This walkthrough uses the same Merchant-Presented Mode (MPM) rules published by EMVCo: a TLV string, a numeric currency, a point-of-initiation method, and a CRC-16 over the payload. EMV QR Hub is an independent toolkit — not an EMVCo product — and generation happens in your browser.

What you are actually generating

An EMVCo MPM QR is not a picture of a logo. The QR encodes one ASCII payload. Wallets parse that string left to right as Tag-Length-Value blocks. If a tag is missing, a length is wrong, or the CRC does not match, many apps refuse the payment before the customer ever sees an amount screen.

Public MPM conventions (see emvco.com for the current QR specification set) require at least: Payload Format Indicator (Tag 00, value 01), Point of Initiation Method (Tag 01), one Merchant Account Information template (IDs 26–51), Merchant Category Code (52), Transaction Currency (53), Country Code (58), Merchant Name (59), Merchant City (60), and CRC (63).

Static versus dynamic before you type an amount

Tag 01 value 11 means a reusable (static) QR. Tag 01 value 12 means a one-time (dynamic) QR. Put 11 when the sticker on the counter should work for many customers who type the amount in their app. Put 12 when your backend mints a fresh payload for one invoice and Tag 54 already holds the amount.

A common production bug is shipping Tag 54 on a static 11 payload, or omitting Tag 54 on a dynamic 12 payload. Wallets disagree on how to recover. Decide the POI first, then decide whether Tag 54 exists.

Fill the merchant identity tags

Tag 59 (merchant name) is capped at 25 characters. Tag 60 (city) is capped at 15. Tag 58 is an ISO 3166-1 alpha-2 country code such as IN, TH, or SG — not a spelling of the country name.

Tag 52 is a four-digit Merchant Category Code. Use the MCC your acquirer assigned, not a guessed retail code. Wrong MCCs can pass CRC and still fail scheme certification.

Inside one MAI template (for example Tag 26), sub-tag 00 is the GUID your network documents. Sub-tags 01–99 are network-specific account data. Do not invent a GUID from another market and expect local wallets to route it.

Currency is numeric ISO 4217

Tag 53 must be the three-digit numeric code: 356 for INR, 764 for THB, 702 for SGD, 840 for USD. Alphabetic codes such as INR or USD are a frequent generator bug. The decoder on this site flags non-numeric Tag 53 because many wallets will not charge the payment.

Worked static example

Example static payload (illustrative, not a live merchant): 00020101021126360014A000000677010111011300660000000005204581253033565802IN5910EMVQRHUB6007DELHI6304A13F

Read it as: 00/02/01 (format 01), 01/02/11 (static), 26/… (account template), 52/04/5812 (MCC), 53/03/356 (INR), 58/02/IN, 59/10/EMVQRHUB, 60/07/DELHI, 63/04/… (CRC). There is no Tag 54, which is correct for a static sticker.

Worked dynamic example

A dynamic cousin adds Tag 01 value 12 and Tag 54 for the amount, for example 54/05/125.00 meaning 125.00 in the Tag 53 currency. Optional Tag 62 can carry an invoice reference so operations can reconcile the scan with an order number.

Generate the CRC last. Tag 63 is always four hex characters computed over the payload including the 6304 prefix and excluding the checksum value itself. If you edit any earlier field, recompute CRC — do not copy a checksum from another sample.

Verify before you print or display

Paste the string into the QR Decoder on this site. Confirm CRC valid, POI matches your intent, Tag 53 is numeric, and name/city are not truncated in a way you did not expect.

Then scan with at least one consumer app that your customers actually use. CRC-valid is necessary, not sufficient: the MAI GUID still has to belong to a network that app can pay.

What this tool will not do for you

EMV QR Hub does not acquire merchants, does not talk to a switch, and does not replace your acquirer’s onboarding. It builds and checks the payload grammar. For the official specification text, use EMVCo’s QR documentation on emvco.com.

Version control the payload

Store the exact string you printed. When you change city spelling, you must reprint. Decoding a photo of an old sticker against a new generator output is how teams argue for days.

What “done” means for a sticker versus a POS

Sticker done: static 11, no 54, payload stored, print tested, staff photo in the ops folder. POS done: 12 with 54, bill number if recon needs it, old sticker retired the same day, 1-unit test after each software push. If both objects are live, you are not done. If cookbook names remain, you are not done.

For the official field list, download EMVCo’s QR specification set from emvco.com. EMV QR Hub is independent, operated by Pankaj Kalra. This walkthrough is the longest how-to in the academy because generation is where most CRC and POI defects are born — decode only reports them.

Explore Related Guides

EMV QR Generator
Create merchant-presented EMV QR payment payloads.
QR Parser & Decoder
Decode QR payloads and inspect EMV tags.
Legal Disclaimer:EMV QR Hub is a technical utility. We do not process financial transactions or store sensitive payment data. Not affiliated with EMVCo, LLC.