Tag URI & Pure Identity URI
The two URI forms that represent what is on a tag and what it means.
Tag URI
urn:epc:tag:sgtin-96:3.0614141.812345.6789 The Tag URI is the complete decode of what is physically stored on the tag. It includes everything: the encoding scheme (sgtin-96), the filter value (3), and all the identity fields. Two tags can carry the same product identity but have different Tag URIs if they use different filter values or encoding sizes (e.g. SGTIN-96 vs SGTIN-198).
Think of it as the tag's raw data translated into a human-readable string. You need the Tag URI when you are programming or debugging tags - it tells you exactly what bits are on the chip.
Tag URI structure
| Part | Example | Meaning |
|---|---|---|
urn:epc:tag: | Fixed prefix identifying this as an EPC Tag URI | |
| Scheme + size | sgtin-96 | The encoding scheme and bit length |
| Filter | 3 | Packaging level (see filter value) |
| Identity fields | 0614141.812345.6789 | Company prefix, item reference, serial number |
Pure Identity URI
urn:epc:id:sgtin:0614141.812345.6789The Pure Identity URI is the abstract identity - what the tag means, stripped of how it was encoded. The filter value is gone. The encoding size is gone. What remains is the identity: which company, which product, which serial number.
Two tags encoded differently - one SGTIN-96 with filter 3, one SGTIN-198 with filter 1 - produce different Tag URIs but the same Pure Identity URI, because they identify the same individual item.
Use the Pure Identity URI when you need to answer "what is this thing?" regardless of how the tag was written. It is the right key for database lookups, deduplication, and business logic.
Pure Identity URI structure
| Part | Example | Meaning |
|---|---|---|
urn:epc:id: | Fixed prefix identifying this as a Pure Identity URI | |
| Scheme family | sgtin | The identifier type (no bit length - that's encoding detail) |
| Identity fields | 0614141.812345.6789 | Company prefix, item reference, serial number (no filter) |
Side by side
Same item, tagged two different ways:
| Tag A (96-bit, filter 3) | Tag B (198-bit, filter 1) | |
|---|---|---|
| Raw hex | 3074257BF7194E4000001A85 | 3634257BF7194E40...0000 |
| Tag URI | urn:epc:tag:sgtin-96:3.0614141.812345.6789 | urn:epc:tag:sgtin-198:1.0614141.812345.6789 |
| Pure Identity URI | urn:epc:id:sgtin:0614141.812345.6789 | |
| Same item? | Yes - same company, same product, same serial | |
When to use which
| Scenario | Use |
|---|---|
| Programming a tag | Tag URI - you need the encoding scheme, filter, and bit length |
| Debugging why a tag reads differently | Tag URI - compare the full encoding |
| Inventory lookup / database key | Pure Identity URI - encoding details don't matter |
| Checking if two tags represent the same item | Pure Identity URI - if they match, it's the same item |
| Sharing identity across systems | Pure Identity URI - encoding-agnostic |
Source
GS1 EPC Tag Data Standard, Release 2.3, Section 6 (URI Forms). Read the EPC encoding guide for a full worked example of decoding hex to URI.