Generate UUID v3
A 128-bit deterministic identifier produced by MD5-hashing a namespace UUID together with a name string, so the same inputs always yield the same ID.
Result
Recomputes whenever the namespace or name changes. Same inputs always produce the same ID.
Inputs
This ID
Collision
The same namespace and name intentionally return the same UUID; that is not an accidental collision. The estimate is only about different inputs landing on the same 122-bit UUID output after version and variant bits are fixed.
Validate and parse UUID v3
Paste an ID
About UUID v3
Use when: you need the same UUID every time the same namespace and name are hashed, and an existing system already uses MD5-based v3.
Avoid when: you are starting fresh. Use UUID v5 instead — same idea, but SHA-1 replaces the broken MD5.
How it is generated
A v3 UUID is fully deterministic — same inputs, same output, every time. There is no timestamp, no counter, no randomness.
You supply a 16-byte namespace UUID and a name string. The two are concatenated as raw bytes (UTF-8 for the name), hashed with MD5, and the 16-byte digest becomes the UUID — with six bits overwritten to mark version and variant.
The four standard namespaces (DNS, URL, OID, X.500) are defined in RFC 9562 §6.6 (Table 3); you can also pass your own UUID as the namespace.
- 01 Concatenate namespace bytes (16) and name bytes (UTF-8) into one buffer.
- 02 Compute MD5 of the buffer. The resulting 16 bytes are your UUID-in-progress.
- 03 Overwrite the high nibble of byte 6 with 0011 (version 3) and the top two bits of byte 8 with 10 (variant).
- 04 Hex-encode with dashes after bytes 4, 6, 8, 10.
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx └──┬───┘ └─┬┘ └─┬┘ └─┬┘ └────┬─────┘ │ │ │ │ └── digest bytes 10..15 (48 bits) │ │ │ └────────── variant "10" + low 14 bits of digest bytes 8..9 │ │ └─────────────── version "3" + low 12 bits of digest bytes 6..7 │ └──────────────────── digest bytes 4..5 (16 bits) └────────────────────────── digest bytes 0..3 (32 bits) Source: MD5(namespace_uuid (16B) ++ name_utf8). Only the version nibble and variant bits are overwritten; everything else is the digest.
All of this runs in your browser. Random bytes come from crypto.getRandomValues, timestamps come from the system clock, and nothing about the generated ID leaves the tab.