GUID / UUID V1 - Time + Node Based Identifier
GUID / UUID v1 is a time-based identifier combining timestamp, clock sequence and node identifier. Learn about its structure, advantages, privacy concerns and when to use it.
GUID / UUID v2 is a rarely used variant derived from GUID / UUID v1 and was originally intended for DCE (Distributed Computing Environment) security systems. It modifies the time-based v1 layout by replacing part of the identifier with a local domain and a local identifier, such as a POSIX UID or GID.
GUID / UUID v2 is a DCE Security variant that was defined in the DCE 1.1 specification around 1997 and later reserved (but not fully specified) in RFC 4122 in July 2005.
In practice, GUID / UUID v2 was meant to embed operating-system level identity information into the GUID / UUID itself. Because this exposes sensitive metadata and was tightly coupled to DCE concepts, v2 never saw widespread adoption and is rarely implemented in modern GUID / UUID libraries.
V2 is effectively deprecated and not recommended for new systems due to its severe privacy concerns, lack of formal standardization and very limited library support. For modern designs, prefer v4 for randomness or v7 for time-ordered identifiers.
Bit layout (practical view): GUID / UUID v2 uses the same overall 128-bit structure and canonical string format as other GUIDs / UUIDs: 8-4-4-4-12. It is based on the v1 layout, but with modifications to support DCE Security.
Fields (what exists): v2 replaces the lower part of the time_low field from v1 with a local identifier (such as a POSIX UID or GID). The clock_seq_low field is repurposed to hold a local domain identifier that specifies what kind of identifier is embedded (for example, POSIX user domain or group domain). The remaining fields include timestamp information, clock sequence and node identifier, similar to v1. Exact usage varies and is not strictly specified in RFC 4122.
Field Bits Hex Digits Description
─────────────────────────────────────────────────────────────────────────
time_low (modified) 32 8 Local identifier (UID/GID) + partial timestamp
time_mid 16 4 Middle 16 bits of timestamp
time_hi_and_version 16 4 High 12 bits of timestamp + 4-bit version (0010)
clock_seq_hi_and_reserved 8 2 2-bit variant (10) + 6 high bits of clock sequence
clock_seq_low (repurposed) 8 2 Local domain identifier (0=user, 1=group, 2=org)
node 48 12 Node identifier (MAC address or random)
Key differences from v1: The time_low field (32 bits) is split to embed the local identifier, and clock_seq_low (8 bits) is repurposed to store the local domain type. The exact bit allocation within time_low is implementation-specific and not fully documented in RFC 4122.
Local domain values: The domain field indicates the type of local identifier: 0 = person/user (POSIX UID), 1 = group (POSIX GID), 2 = organization. This tells the system how to interpret the embedded identifier.
Ordering behavior: because v2 is derived from v1, it contains time information, but the modification of the timestamp and time_low fields means ordering behavior is implementation-dependent and should not be relied upon for sorting. In practice, v2 provides only partial sortability.
Deterministic generation: GUID / UUID v2 is not deterministic. Different systems generating v2 GUIDs / UUIDs at the same time will produce different identifiers due to differences in UID/GID, node address and clock sequence.
Try our GUID / UUID Inspector and see for yourself what fields are available.
GUID / UUID v2 uses the standard 8-4-4-4-12 canonical format with 32 hexadecimal digits separated by hyphens (36 characters total).
Canonical format: 8-4-4-4-12
Example (v2): 000003e8-8b86-21d0-b42d-00c04fc964ff
Layout: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
^ ^
| └─ N = Variant: is typically 8, 9, a or b (RFC variant)
└────── M = Version: first hex digit of the 3rd group is "2" for v2
Practical rule: in the canonical string, the version is encoded as the first hex digit of the third group. For v2 it is 2. The variant is indicated by the high bits of the fourth group (often rendered as 8-b in hex for the common standard variant). Other internal fields should be treated as opaque and implementation-specific.
uuid module doesn't support it, nor do most JavaScript, Java or .NET libraries. The lack of support reflects the consensus that v2 should not be used. If you encounter a v2 GUID / UUID, it's likely from legacy DCE systems.GUID / UUID v2 is a historical, DCE-specific variant that is rarely encountered in modern systems. While it builds on the time-based structure of v1, its lack of formal standardization, limited support and significant privacy drawbacks make it unsuitable for new applications. For modern designs.
These articles expand on related concepts, formats and practical considerations.