What is a UUID Validator
A UUID validator answers two different questions. The first is structural: is this string a well-formed 128-bit identifier — 32 hex digits, normally written as 8-4-4-4-12, with the version nibble and the variant bits set the way RFC 9562 requires. The second is semantic: what does the value actually contain?
This tool checks both. It normalises the input first, so braces, parentheses, quotes, upper case and a missing hyphen run are all accepted, then reports the version, the variant and — where the layout allows it — the embedded time. It deliberately does not claim that a UUID was ever issued: UUIDs are created without any central registry, so “valid” can only ever mean “well-formed and self-consistent”.
How to
- Paste one value per line — up to 200 lines at a time.
- Press Validate. Each line is parsed on its own, so a broken entry does not stop the rest.
- Read the table: validity, the version nibble, and a decoded description of what the value contains.
Use cases
- Debugging API responses where an identifier may be a UUID, a GUID, a slug or something else entirely.
- Sanity-checking a data import before a migration: are all rows really 32 hex digits, or is one column full of truncated values?
- Confirming which version a system really emits — v4 for random keys, v7 when the database relies on insert order, v1 for legacy Windows tooling.
Structure
The 13th hex character carries the version and the 17th carries the variant. Everything before those markers is payload: for v4 it is random, for v7 the first 48 bits are a Unix millisecond timestamp, for v1 and v6 a 60-bit count of 100-nanosecond ticks since 1582-10-15.
That is why only some versions can be decoded. A v3 or v5 UUID is the MD5 or SHA-1 hash of a namespace plus a name, and a hash cannot be run backwards, so the validator can confirm the structure but cannot tell you which name produced it.
Compare UUID Validator with other formats
| Option | When to use |
|---|---|
UUID v1 | Time + node. The 60-bit timestamp and the node field can both be decoded. |
UUID v4 | 122 random bits. Well-formed or not is all there is to know. |
UUID v7 | 48-bit Unix time first, then random. The timestamp is directly readable. |
UUID v3 / v5 | Hash of a namespace and a name. Structure verifiable, input not recoverable. |
Code examples
JavaScript
// Strict check: version 1-8 and an RFC variant nibble.
const STRICT = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
STRICT.test('550e8400-e29b-41d4-a716-446655440000'); // true
STRICT.test('550e8400-e29b-01d4-a716-446655440000'); // false, version 0
Python
import uuid
try:
u = uuid.UUID('550e8400-e29b-41d4-a716-446655440000')
print(u.version, u.variant) # 4, 'specified in RFC 4122'
except ValueError as exc:
print('not a uuid:', exc)
PostgreSQL
-- Reject the row rather than let a bad value through
ALTER TABLE items ADD CONSTRAINT items_id_is_uuid
CHECK (id::text ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$');
-- PostgreSQL 18 can read the metadata directly
SELECT uuid_extract_version(id), uuid_extract_timestamp(id) FROM items LIMIT 5;
Frequently asked questions
What makes a UUID invalid?
Three things, in order: the string is not 32 hex digits once separators are removed; the version nibble (13th hex character) is 0, 9 or above, which no RFC version uses; or the variant bits (17th character) match none of the defined variants. Case, braces and missing hyphens are not errors — they are just alternative notation.
Can I decode the time from any UUID?
No. Only v1, v6 and v7 embed a clock reading. v4 is pure random and carries no payload. v3 and v5 are hashes, and a hash cannot be reversed to reveal the name it was computed from.
Does a valid UUID mean the record exists?
No. UUIDs are designed to be created independently by any machine without a registry, so nothing about the string tells you whether it was ever stored anywhere. Validation is about format and self-consistency only.