Skip to content
Utah Marking — Industrial Marking & Traceability
G-06TECHNICAL GUIDE

How to Read a UII

A UII looks like one long string, but it is three or four fields concatenated in a fixed order. This guide takes D1A2B3PN-A1234X0001 apart character by character, explains how a reader derives the UII from the Data Matrix, and shows why you cannot always parse one by eye.

Updated
2026-10-03
Length
909 words

Here is a Unique Item Identifier as it would appear in the DoD IUID Registry:

D1A2B3PN-A1234X0001

Nineteen characters, no separators, nothing to indicate where one field ends and the next begins. It is readable once you know the rule: a UII is a fixed sequence of fields concatenated in order, and the first one or two characters tell you how to read the rest.

The four pieces

PieceCharactersMeaning
Issuing agency code (IAC)DWhat kind of enterprise identifier follows. D means a CAGE code.
Enterprise identifier (EID)1A2B3The CAGE code of the enterprise that assigned the UII.
Original part numberPN-A1234Present under Construct 2 only.
Serial numberX0001Unique within the part number (Construct 2) or the enterprise (Construct 1).

Concatenated: D + 1A2B3 + PN-A1234 + X0001 = D1A2B3PN-A1234X0001.

The issuing agency code

The IAC is a prefix from ISO/IEC 15459 that qualifies the enterprise identifier. The ones you will meet on DoD hardware:

  • D — the enterprise identifier is a CAGE code (five characters).
  • UN — the enterprise identifier is a DUNS number (nine digits).
  • A digit 0–9 — the enterprise identifier is a GS1 company prefix (the IAC is the first digit of the prefix itself).
  • LD — a DoDAAC, used by DoD activities marking their own property.

So D1A2B3… reads "CAGE code 1A2B3." A UII beginning UN123456789… reads "DUNS 123456789."

The enterprise identifier

For a CAGE code, exactly five characters follow the D. CAGE codes are five alphanumeric characters and never contain the letters I or O, which removes the usual 1/I and 0/O ambiguity. See What is a CAGE code for where the code comes from and where else it appears.

The part number, under Construct 2

Under Construct 2 the original part number follows the enterprise identifier: the part number the item was first produced under, without a revision letter. Here it is PN-A1234. Under Construct 1 there is no part number at all and the serial follows the enterprise identifier directly. Construct 1 vs Construct 2 covers when each is used.

A lot or batch number can take the part number's place under Construct 2 for items serialized within a lot.

The serial number

The last field is the serial, here X0001. Under Construct 2 it only has to be unique within the part number; under Construct 1, across the entire enterprise.

Why you cannot always parse one by eye

Look at the example again: D1A2B3PN-A1234X0001. Nothing in the string says the part number is eight characters and the serial five. It could, in principle, be part number PN-A1234X and serial 0001. The UII is unambiguous as an identifier, because it is unique as a whole, but it is not self-describing as a set of fields.

That is why the Data Matrix does not carry the concatenated UII. It carries the fields separately, each tagged with a qualifier, inside an ISO/IEC 15434 message, and the reader concatenates them. The fields are recoverable from the symbol, not from the string.

How a reader derives it from the Data Matrix

In Format 06, the message inside the symbol for the example is:

[)> RS 06 GS 17V1A2B3 GS 1PPN-A1234 GS SX0001 RS EOT

RS, GS, and EOT are the ASCII 30, 29, and 4 control characters. The reader:

  1. Sees the [)> RS 06 header and knows the qualifiers are ASC MH10.8.2 data identifiers.
  2. Finds 17V and reads the CAGE 1A2B3. The 17V identifier tells it the IAC is D.
  3. Finds 1P and reads the original part number PN-A1234.
  4. Finds S and reads the serial X0001.
  5. Concatenates IAC + EID + part number + serial: D1A2B3PN-A1234X0001.

In Format 12 the same fields are tagged MFR, PNO, and SEQ instead, and the derived UII is identical. Format 06 vs Format 12 covers the two qualifier systems.

Under Construct 1 in Format 06, the whole thing can be one element: 18S1A2B3X0001 (CAGE plus serial, IAC implied) or 25SD1A2B3X0001 (the complete UII including the IAC). Either way the reader arrives at D1A2B3X0001.

The rules the string has to obey

  • 50 characters maximum, counting the IAC.
  • Uppercase A–Z, 0–9, dash, and forward slash only. No spaces, no lowercase, no other punctuation.
  • Never changes. Once assigned to an item, the UII stays with it through repair, rebuild, and part number revisions. A new UII is a new item.
  • Unique, by construction: the enterprise identifier guarantees no two enterprises collide, and the enterprise guarantees the serial (within the part number) does not repeat.

Reading a few more

UIIReads as
D1A2B3X0001CAGE 1A2B3, Construct 1, serial X0001
D1A2B3LOT2026-04A017CAGE 1A2B3, Construct 2 with lot LOT2026-04A, serial 017 (only the symbol tells you where the lot ends)
UN123456789PN-A1234X0001DUNS 123456789, Construct 2, part PN-A1234, serial X0001
LD + DoDAAC + serialA DoD activity's own property, Construct 1

The IUID generator builds the message from the fields, checks the character set and the 50-character limit, and shows the derived UII next to the symbol, which is the quickest way to confirm a string before it is marked on a part or submitted to the Registry.

→PUT IT TO WORK
HAVE THE DATA STRING?

Send it with the drawing and we’ll quote the marked part.