EMV tags · Kernel 2 and Kernel 8, UIRD 1 and Kernel 8, UIRD 2
DF8116 9F8205 9F8219 User Interface Request Data (UIRD)
| Tag | DF8116 – Kernel 29F8205 – Kernel 8, UIRD 19F8219 – Kernel 8, UIRD 2 |
|---|---|
| Name | User Interface Request Data (UIRD) |
| Format and length | b 22 |
| Source | Kernel, sent to the terminal |
| Where you see it | With the outcome, and in messages the kernel sends during processing |
User Interface Request Data, or UIRD, is the kernel's instruction to the reader's display, lights and sounds. It is 22 bytes long and says which message to show, which status to signal, for how long, in which language and with which amount. Kernel 2 uses DF8116. Kernel 8 has two: 9F8205 (UIRD 1) and 9F8219 (UIRD 2).
Fields
- Message Identifier, 1 byte: for example
17CARD READ OK,03APPROVED,07declined,1AAPPROVED – SIGN,1BAUTHORISING – PLEASE WAIT,20SEE PHONE,21TRY AGAIN in Kernel 8,1ECLEAR DISPLAY,FFN/A. - Status, 1 byte:
00NOT READY,01IDLE,02READY TO READ,03PROCESSING,04CARD READ SUCCESSFULLY,05PROCESSING ERROR,FFN/A. Readers use it to drive their status lights and beeps. - Hold Time, 3 bytes, n6: how long the message stays, in units of 100 ms.
- Language Preference, 8 bytes: the card's language preference, padded with hexadecimal zeroes.
- Value Qualifier, 1 byte: whether to show an amount, a balance or nothing.
- Value, 6 bytes, n12, and Currency Code, 2 bytes, n3: the amount or balance to show.
One UIRD or two
In Kernel 8, UIRD 1 is included in the outcome when the Outcome Parameter Set flags "UI Request on Outcome Present" or "UI Request on Restart Present" are set. If both flags are set, UIRD 1 is for the outcome and UIRD 2 holds what to show when the transaction restarts, for example "SEE PHONE" before the second tap of a phone payment. Kernel 2 sends a single UIRD with the outcome, and can send others while it is processing.
Example
17 04 000013 656E000000000000 10 000000002500 0124: CARD READ OK, card read successfully, hold for 1.3 seconds, language "en", show the amount 25.00 in Canadian dollars.
Common mistakes
- Reading the hold time as binary or as milliseconds. It is BCD, in units of 100 ms.
- Ignoring the language preference and always displaying the terminal's default language.
- Showing a value without checking the Value Qualifier, so a balance is displayed as if it were the amount.
- Not handling CLEAR DISPLAY or N/A, which leaves old messages on screen.
Decode a value
Related
Kernel 8 definitions follow EMV Contactless Book C-8 v1.0; Kernel 2 definitions follow EMV Contactless Book C-2. Always check the EMVCo and payment scheme specifications that apply to your project.