EMV TLV Parser & DOL Builder

Parse EMV BER-TLV encoded data objects and build DOL (Data Object List) structures. Paste raw EMV card data or transaction hex, and get instant tag-by-tag decoding with EMVCo-standard descriptions. Build PDOL, CDOL, DDOL, and TDOL for EMV transaction testing.

TLV Hex Input

Decoded Tags

Paste TLV hex and click Parse TLV

EMV TLV Data Objects

EMV and GlobalPlatform use BER-TLV (Basic Encoding Rules, Tag-Length-Value) encoding for data exchange between card and terminal. Each data object is identified by a tag, has a specified length, and contains a value. Constructed objects contain nested TLV structures.

EMV Tag Categories

EMV tags fall into several ranges: 5Fxx tags (like 5F24 Application Expiry Date, 5F2A Transaction Currency Code) are primitive data elements. 9Fxx tags (like 9F02 Amount Authorized, 9F27 CID, 9F36 ATC) cover transaction-specific data. 7Fxx and 6Fxx tags are constructed templates wrapping multiple sub-tags. BFxx tags are context-specific constructed objects used in FCI templates.

Parsing Workflow

The parser reads the hex input, splits it into TLV objects. For each object: Tag is 1-2 bytes (second byte present if low 5 bits of first byte are all 1s). Length is 1-5 bytes: short form (0-127) or long form (0x81-0x84 prefix indicating how many bytes follow). Value is the specified number of bytes. If the tag's constructed bit is set, the parser attempts recursive decoding of the value as nested TLV. The result is displayed as a tree with tag, length, hex value, and ASCII interpretation. Use our EMV Tag Lookup to find tag definitions and BER-TLV Parser for general-purpose TLV parsing.

BER-TLV vs DER vs PER Encoding

BER (Basic Encoding Rules) is the original ASN.1 encoding defined in X.690. It allows multiple ways to represent the same data — for example, a length of 5 can be encoded in short form (single byte 05) or long form (two bytes 81 05). DER (Distinguished Encoding Rules) restricts BER to a single canonical form, which is critical for cryptographic signatures — if the signer and verifier parse the data differently, the signature check fails. EMV uses DER for all signed data (static data authentication, dynamic data authentication, issuer/ICC public key certificates) and BER-TLV for general data exchange. PER (Packed Encoding Rules) is used in telecommunications but not in payment cards.

Understanding DOL (Data Object List) Structures

A DOL is a template that tells the terminal which data objects the card needs for a specific operation. PDOL (Processing Options Data Object List, tag 9F38) lists data the terminal must send in the GPO (GET PROCESSING OPTIONS) command — typically terminal type, transaction amount, country code, and unpredictable number. CDOL1 (tag 8C) lists data for the first GENERATE AC command, which requests the first cryptogram (usually a TC or ARQC). CDOL2 (tag 8D) is used for the second GENERATE AC, which may request a different cryptogram (like an AAC after an ARQC). The DOL itself is simply a concatenated list of tag-length pairs with no values — the terminal fills in the values and sends the assembled data to the card.

Critical EMV Tags You Should Know

Tag 9F10 (Issuer Application Data) is the most card-specific tag — its format varies by payment scheme (Visa uses a structured CVN format, Mastercard encodes a CVC3 and accumulator). Tag 9F26 (Application Cryptogram) holds the 8-byte AC value generated by the card's symmetric key. Tag 9F27 (CID) is a single byte that classifies the cryptogram type: 00 = AAC (decline), 40 = TC (offline approval), 80 = ARQC (online authorization). Tag 9F36 (ATC) is the 2-byte Application Transaction Counter that increments with each transaction and prevents replay attacks. Tag 9F37 (Unpredictable Number) is the terminal's random challenge used for DDA and CDA signatures.

Constructed Objects and Recursive Parsing

Tags like 6F (FCI Template), 70 (Read Record Response), and 77 (Response Message Template Format 2) are constructed — their value contains nested TLV objects. The parser detects this via the constructed bit (bit 6 of the first tag byte). When set, the parser attempts to decode the value field as nested TLV, building a tree structure. This is essential for reading card responses: a SELECT command returns an FCI template (6F) that wraps the AID (84), application label (50), and proprietary data (BF0C) as nested objects. The BF0C itself is another constructed object containing issuer-discretionary data.

Practical Use Cases

Use the TLV Parser to inspect raw card data from APDU traces — paste the response bytes from a READ RECORD command to see cardholder name, PAN, expiry date, and issuer data at a glance. Use the DOL Builder to construct the data block for a GPO or GENERATE AC command during EMV transaction testing — load a PDOL preset, fill in the values (amount, terminal country, unpredictable number), and copy the assembled hex directly into your test script. Use the Tag Reference tab as a quick lookup during development — search by tag hex or keyword to find the format (numeric, binary, alphanumeric) and class (Application, Terminal, Transaction, Issuer) of any EMV tag.

Decode Real EMV Tags

The TLV trees this parser renders come off payment cards; a reader gets you those bytes.

ACR1252U Smart Card Reader ACR1252U Smart Card Reader (~$65) — Handles the contact + contactless EMV cards that carry the TLV data this tool parses.
Check Price on Amazon

Disclosure: As an Amazon Associate, CardWise earns from qualifying purchases at no additional cost to you. This does not affect our recommendations.