UUID Validator and Decoder

Check whether a UUID is valid and decode it: version, variant, and for v1, v6 and v7 the exact timestamp inside. Paste one or hundreds at once. Accepts braces, uppercase, urn:uuid and 32 hex forms. Runs in your browser.

Check your UUIDs

Paste one or many, one per line. Braces, uppercase, urn:uuid and 32 character forms are all fine.

Result

InputResultVersionVariantDecoded

What the validator checks

  • Shape. 32 hexadecimal characters in the 8-4-4-4-12 layout. Uppercase and lowercase are both fine.
  • Version. The first character of the third group must be 1 to 8. This is the version number.
  • Variant. The first character of the fourth group must be 8, 9, a or b, which marks an RFC UUID. Values with c or d there are the reserved Microsoft variant and are reported as invalid, the same way the uuid libraries in Node, Python and Go treat them.

Each line of the result says why an invalid value failed: wrong length, a character outside 0-9 and a-f, hyphens in the wrong places, or version and variant bits outside the standard.

What the decoder reads out

  • Version and what it means: random, time based, name based, or the nil and max special values.
  • v7: the creation time to the millisecond, from the first 48 bits.
  • v1 and v6: the creation time to 100 nanoseconds, the clock sequence, and the node id, which is a MAC address when the generator used a real one.
  • v3 and v5: which hash was used. The original name cannot be recovered, it is a one way hash.

Input forms that are accepted

Paste as many as you like, one per line or separated by commas. These are all read as the same value:

f47ac10b-58cc-4372-a567-0e02b2c3d479
F47AC10B-58CC-4372-A567-0E02B2C3D479
{f47ac10b-58cc-4372-a567-0e02b2c3d479}
urn:uuid:f47ac10b-58cc-4372-a567-0e02b2c3d479
f47ac10b58cc4372a5670e02b2c3d479
"f47ac10b-58cc-4372-a567-0e02b2c3d479"

Use Copy valid to get the cleaned, lowercase, hyphenated form of every value that passed, ready to paste into a query or a config file.

Validate in your own code

A library beats a regex because it also handles the version and variant rules, and most languages ship one. Our per language pages have the exact calls: JavaScript, Python, Java, Go, C#, PHP, Ruby, Rust. When a regex is what you need, this one enforces version and variant:

^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

Add the i flag to accept uppercase. Our post on validating a UUID with regex walks through the variants, including the nil UUID and why some parsers are more lenient than you expect.

Why a value can look right and still fail

The classic example is 12345678-1234-1234-1234-123456789abc. The shape is perfect and the version character is 1, but the variant character is also 1, which means the NCS variant from the 1980s, not an RFC UUID. Libraries reject it, so this validator does too. Made up test ids often have this problem. If you need fixed ids for tests, generate real ones once and paste them into your fixtures, or use name based v5 ids so they are stable and valid.

Frequently asked questions

Is the nil UUID 00000000-0000-0000-0000-000000000000 valid?

Yes. The RFC defines it as a special value and every library accepts it. This tool reports it as valid with version nil. The same goes for the max UUID, all f.

Can the decoder tell me when a v4 UUID was created?

No. v4 has no timestamp, it is 122 random bits. Only v1, v6 and v7 carry a creation time.

Is the timestamp in a v7 UUID accurate?

It is whatever the generating machine's clock said, to the millisecond. If that clock was wrong, the timestamp is wrong. Treat it as a hint, not as an audit log.

Does this tool send my UUIDs anywhere?

No. The checks run in your browser with the same uuid library our generator uses. Nothing is uploaded or logged.

↑ Top
Copied!