Bit layout
View this section in the spec ↗128 bits, big-endian, a valid UUIDv8: 6 bits fixed by UUID, 122 TNID's.
Terminology
- TNID-specific bits (122) = name (20) + data (102). UUID-specific bits (6) = UUID version (4) + UUID variant (2).
- Data bits = TNID variant (2) + payload (100): what the 17 data characters of a TNID string encode.
- TNID variant: the scheme for reading the payload, as a UUID's version is. Unrelated to the UUID variant.
Visual layout
One digit per bit, one group per hex digit, breaks at the UUID hyphens: 1 name, 2 UUID version, 3 UUID variant, 4 TNID variant, 5 payload.
1111.1111.1111.1111.1111.5555.5555.5555-
5555.5555.5555.5555-
2222.5555.5555.5555-
3344.5555.5555.5555-
5555.5555.5555.5555.5555.5555.5555.5555.5555.5555.5555.5555RFC-style, 32 bits per row, most significant bit first:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| name | payload |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| payload | ver | payload |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| tv| payload |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| payload |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Components
MSB = 0: bit index from the top. LSB = 0: shift in the 128-bit integer. Hex digits count from 1, hyphens ignored.
| Component | Bits | MSB = 0 | LSB = 0 | Hex digit | Value |
|---|---|---|---|---|---|
1 Name | 20 | 0–19 | 108–127 | 1–5 | Name encoding, null-padded at the end |
5 Payload, upper | 28 | 20–47 | 80–107 | 6–12 | Variant-specific |
2 UUID version | 4 | 48–51 | 76–79 | 13 | MUST be 0x8 |
5 Payload, middle | 12 | 52–63 | 64–75 | 14–16 | Variant-specific |
3 UUID variant | 2 | 64–65 | 62–63 | 17, high 2 bits | MUST be 0b10 |
4 TNID variant | 2 | 66–67 | 60–61 | 17, low 2 bits | 0b00–0b11, selects the variant |
5 Payload, lower | 60 | 68–127 | 0–59 | 18–32 | Variant-specific |
- Hex digit 13 is always
8. - Hex digit 17 is
8,9,aorbfor TNID variants 0–3. - Hex digits 1–5 are the name: every
userTNID startsd6157. Sorted TNIDs group by name.
Payload (100 bits)
The three runs, most significant first, form one 100-bit value, as used by the variants, the TNID string and encryption:
payload = ((id >> 80) & 0xFFFFFFF) << 72 upper, 28 bits
| ((id >> 64) & 0xFFF) << 60 middle, 12 bits
| id & 0xFFFFFFFFFFFFFFF lower, 60 bitsValidating a 128-bit value
- UUID version is
0x8:(id >> 76) & 0xF == 0x8. - UUID variant is
0b10:(id >> 62) & 0x3 == 0b10. - Name bits are valid: not all null, no non-null after a null.
Every TNID variant is valid. Parsers SHOULD accept the reserved variants 2 and 3.