EMV QR Payload Cookbook
This is the single payload cookbook for the academy (the old sample-payloads URL redirects here). Every example is illustrative — not a live merchant. Use them to learn TLV layout, then generate production strings with your acquirer’s GUID.
How to read a sample
Read two digits of tag, two digits of length, then the value. Nested templates repeat the rule. CRC (Tag 63) is four hex characters at the end. If you copy a sample into production, you will route to a fake destination or fail scheme checks.
Static reusable payload (no Tag 54)
00020101021126360014A000000677010111011300660000000005204581253033565802IN5910EMVQRHUB6007DELHI6304A13F
Meaning: format 01, POI 11 static, one MAI template, MCC 5812, INR (356), India, name EMVQRHUB, city DELHI, then CRC. Customer must type the amount. This is the sticker pattern.
Dynamic payload with amount and invoice
A dynamic payload uses POI 12, includes Tag 54 (amount in Tag 53 currency), and may include Tag 62 with an invoice sub-tag so finance can match the scan to an order. After changing 125.00 to another amount, recompute CRC. Never reuse a dynamic string for a second bill.
Nested merchant account
Tags 26–51 wrap an inner TLV list. Inner 00 is GUID. Inner 01 often holds an account or proxy. If the outer length does not equal the inner bytes, parsers desynchronize and later tags (name, city) look corrupted even when CRC was computed on the broken string.
Failing CRC to practice debugging
Take a valid sample and flip the last hex digit of Tag 63. The decoder should report invalid CRC. Restore the original four characters and it should pass. That drill is more useful than memorizing one checksum.
Consumer-presented is a different mode
This cookbook is merchant-presented (the shop shows the code). Consumer-presented mode is the inverse: the wallet shows a QR the merchant scans. Do not mix CPM samples into an MPM generator.
Generate your own instead of cloning
Open the EMV QR studio, fill acquirer fields, generate, then paste into Decode. Compare tag-by-tag with the static sample above. Official field lists live in EMVCo QRCPS on emvco.com. We are not EMVCo.
Do not ship the sample GUID
The A000000677… style prefixes in samples are for layout drills. Production GUIDs come from your acquirer. Cookbook CRC values are bound to those sample bytes only.
How this page relates to testing
Use cookbook strings as parser fixtures. Use the testing article for wallet matrices. Use validation-examples for expected verdicts. Three jobs, three URLs — sample-payloads no longer exists as a duplicate.
How to use a cookbook without shipping it
Samples exist so you can see TLV boundaries, nested MAI, CRC placement, and the difference between 11 and 12. They are not merchant credentials. Do not print EMVQRHUB on a door. Do not ship the sample GUID. Production GUIDs and account proxies come from your acquirer. CRC values in samples are bound to those exact bytes; copy-paste after an edit will fail.
This page replaced the old sample-payloads URL (now a 301) so reviewers see one cookbook, not two near-duplicates. Use these strings as parser fixtures. Use the testing article for wallet matrices. Use validation-examples for expected verdicts. Three jobs, three URLs.
Static sample: what you should notice
A reusable payload has Tag 01=11, no Tag 54, numeric Tag 53, two-letter Tag 58, and Tag 63 last. Read MAI as a tree: GUID then proxy. If you cannot find those properties in the string, you are looking at a billed sample or a broken one. Paste into Decode and match the tag table to this description before you trust a blog screenshot.
When you generate your own static sticker in the studio, change name, city, MCC, country, currency, and MAI, then recompute CRC. The worked string on this page is illustrative only. Consumer-presented samples do not belong here; CPM is a different mode and a different generator.
Dynamic sample: amount and invoice
A billed cousin sets Tag 01=12, adds Tag 54 (for example 125.00 in the Tag 53 currency), and may add Tag 62 with a bill number. Wallets should lock the amount. If your dynamic sample still has 010211, the cookbook is wrong — fail it. If Tag 54 uses the wrong decimal convention for a zero-decimal currency, see the ISO 4217 article.
Include a deliberately failing CRC string in your fixture folder (last nibble flipped). Engineers should practice “invalid” until it is boring. Do not use the failing string in a print test and then wonder why wallets refuse.
Generate, decode, store
The studio at /emv/ will always be a better source of a payload than cloning a cookbook line. Decode at /decode/ is the inspection. Store the exact ASCII string with the print or POS version. When someone asks “which QR was on the counter in May,” you want the string, not a photo of a sun-faded sticker.
Normative layout: EMVCo QR specifications on emvco.com. We are independent. Operator: Pankaj Kalra. Examples on this page are original toolkit strings for teaching, not extracts from EMVCo PDFs.
Diffing two cookbook strings
Paste static and dynamic samples side by side in Decode. Diff Tag 01 and presence of 54. That single diff teaches POI faster than a table of synonyms. Then mutate one field and watch CRC change. Students remember what they diffed.
Version the cookbook
When you change samples, bump a comment in git and re-run validation scripts. Old blog posts will still show outdated CRC; your repo should not. Samples are code, not marketing fluff.
