IUID Construct 1 vs Construct 2
MIL-STD-130 gives you two ways to build a UII. Construct 2 adds the part number and is the usual choice for manufactured parts; Construct 1 relies on a serial that is unique across the whole enterprise. This guide covers what each one is made of, when to pick it, and what it looks like inside the Data Matrix.
- Updated
- 2026-09-18
- Length
- 1062 words
A Unique Item Identifier, or UII, is the string the DoD stores in the IUID Registry for one physical item. MIL-STD-130 gives an enterprise two ways to assemble it, called Construct 1 and Construct 2. They differ in one thing: whether the part number (or a lot or batch number) is part of the identifier.
Both constructs are built from the same raw materials:
- An issuing agency code (IAC) that says what kind of enterprise identifier follows.
Dmeans a CAGE code,UNmeans a DUNS number. Other codes exist for GS1 and ATA identifiers. - An enterprise identifier (EID): the CAGE or DUNS of the enterprise that assigns the UII.
- A serial number.
- Under Construct 2 only, an original part number or a lot / batch number between the enterprise identifier and the serial.
The UII is the concatenation of those elements, in that order, with no separators. It is limited to 50 characters from A–Z, 0–9, dash, and forward slash. Once assigned to an item it never changes, even if the part number is later revised or the item is rebuilt.
Construct 1: enterprise identifier + serial
Under Construct 1 the serial number must be unique across everything the enterprise has ever serialized, not just within one part number. The UII is simply:
IAC + EID + serial
D 1A2B3 X0001 → D1A2B3X0001
That is a strong promise. If your ERP already issues serials from one enterprise-wide sequence, Construct 1 is natural. If serial numbers restart at 0001 for each part number, as they do in most job shops and most travelers, Construct 1 is not available to you, because two different parts would share a UII.
Construct 1 also comes up on legacy and in-service items: equipment that is already in the field and is being marked after the fact by someone other than the original manufacturer. In that case the enterprise assigning the UII is the one marking the item, and the serial is one it controls.
Construct 2: enterprise identifier + part number + serial
Construct 2 inserts the original part number (or a lot or batch number) so that the serial only has to be unique within that part number:
IAC + EID + original part number + serial
D 1A2B3 PN-A1234 X0001 → D1A2B3PN-A1234X0001
Two things are easy to get wrong here. The part number in the UII is the original part number, the one under which the item was first produced. Do not fold a revision letter into it, and do not change it when the drawing revs. And the serial must still be unique for the life of that part number: reusing X0001 on next year's lot of the same part produces a duplicate UII.
Construct 2 is the path almost every manufactured part takes into the Registry, because it matches how shops already serialize. When a contract or drawing does not say which construct to use, Construct 2 with the CAGE code and original part number is the usual answer.
Which one to use
| Situation | Construct |
|---|---|
| Serials restart per part number (most shops) | 2 |
| Serials are unique enterprise-wide, from one sequence | 1 or 2 |
| Lot- or batch-controlled items without individual serials | 2, with a lot number in place of the part number and a serial within the lot |
| Legacy item being marked in service by a supplier or depot | 1, with the marking enterprise's identifier |
| The contract, drawing, or prime specifies | Whatever it specifies |
The construct is part of your data, not part of our process. We mark the UII data you supply; the decision about which construct to use belongs to whoever is submitting the items to the Registry, and DFARS 252.211-7003 places that on the contractor.
How each construct is encoded in the Data Matrix
The Data Matrix does not carry the concatenated UII as such. It carries the elements separately, each tagged with a qualifier, inside an ISO/IEC 15434 message. A reader parses the elements and derives the UII. MIL-STD-130 allows two qualifier systems for this, and the construct decides which qualifiers appear:
| Format 06 (data identifiers) | Format 12 (text element identifiers) | |
|---|---|---|
| Construct 1, CAGE | Single element: 18S + CAGE + serial, or 25S + IAC + CAGE + serial | MFR + CAGE, then SER + serial |
| Construct 1, in-service, supplier-assigned | 18S or 25S as above | SPL + CAGE, then UCN + serial |
| Construct 2, CAGE, part number | 17V + CAGE, 1P + part number, S + serial | MFR + CAGE, PNO + part number, SEQ + serial |
| Construct 2, CAGE, lot number | 17V + CAGE, 1T + lot, S + serial | MFR + CAGE, LTN + lot, SEQ + serial |
| DUNS instead of CAGE | 12V replaces 17V | DUN replaces MFR |
Notice that Format 06 has no separate "serial unique within the enterprise" identifier. A Construct 1 UII in Format 06 is encoded as one element, 18S or 25S, that already contains the serial. Format 12 spells it out as two elements instead. Either way the derived UII is identical. The choice between the two formats is a separate decision, covered in Format 06 vs Format 12.
For the worked example above, Construct 2 in Format 06 encodes as:
[)> RS 06 GS 17V1A2B3 GS 1PPN-A1234 GS SX0001 RS EOT
where RS, GS, and EOT are the ASCII 30, 29, and 4 control characters, and the reader derives D1A2B3PN-A1234X0001.
Checklist before you send the data
- The UII is 50 characters or fewer, uppercase, with only A–Z, 0–9,
-, and/. - Under Construct 2, the part number is the original part number without a revision.
- Serials do not repeat within the part number (Construct 2) or within the enterprise (Construct 1), including on earlier lots.
- The CAGE or DUNS is the one that will submit to the Registry.
- Human-readable information on the item matches the encoded elements. The IUID generator builds the message from your fields, applies these checks, and shows the concatenated UII so you can compare it with your Registry submission before anything is marked.