🆔 UUID Generator

Generate random (v4), time-based (v1), or nil UUIDs in bulk. Runs entirely in your browser.

VERSION
ab6c80f1-6690-4c09-a3db-2b12c631e84b
cb2591f8-0e23-4c4a-98a1-c32e374de07e
a64117a4-8bc5-44d0-8a62-f6f67e122ad2
211d5963-3e6d-4c69-828a-561dd68272e0
fbdc9f23-bd2c-4cd1-a528-c677f61227e9

About the UUID Generator

A UUID (Universally Unique Identifier) is a 128-bit value used to label information without a central authority — database primary keys, request IDs, file names, and distributed-system entities all rely on them. Written as 32 hexadecimal digits in five hyphen-separated groups (8-4-4-4-12), a UUID is unique enough that you can generate one anywhere and trust it won't collide with another. This tool creates them in bulk, entirely in your browser.

Version 4 UUIDs are generated from cryptographically strong randomness via your browser's crypto.randomUUID() / getRandomValues() APIs. Version 1 UUIDs encode a timestamp and a random node, and the nil UUID is the all-zero placeholder value.

How to use it

  1. Pick a version — v4 (random), v1 (time-based) or Nil (all zeros).
  2. Set the count (1–100) with the input or the quick chips.
  3. Format the output with the Hyphens, Uppercase, and Quotes toggles — handy for pasting straight into code.
  4. Copy any single UUID, or use Copy all. Press Generate anytime for a fresh batch — no page reload.

Features

🎲 v4 random

Cryptographically strong random UUIDs from the native Web Crypto API.

🕐 v1 time-based

Timestamp-encoded UUIDs with a random node and clock sequence.

🔢 Bulk generation

Generate up to 100 at once, each with its own copy button.

🎛 Format toggles

Strip hyphens, switch case, or wrap in quotes for direct code pasting.

📋 Copy all

Grab the entire batch as newline-separated text in one click.

🔒 100% client-side

Generated locally in your browser — nothing is requested from or sent to a server.

Frequently Asked Questions

Which UUID version should I use?

Version 4 (random) is the safe default for almost everything — database keys, request IDs, and general uniqueness. Version 1 (time-based) is useful when you want IDs that are roughly sortable by creation time, though it historically leaked the machine's MAC address (this tool uses a random node instead). The nil UUID is a special all-zero value used as a placeholder or 'no UUID' marker.

Are these UUIDs guaranteed to be unique?

Version 4 UUIDs draw 122 random bits, so the probability of a collision is astronomically small — you'd need to generate billions per second for many years to have a realistic chance. They aren't mathematically guaranteed unique, but they are unique enough for every practical purpose.

Why does the v1 node look random instead of a MAC address?

The classic UUID v1 spec embeds the generating machine's network MAC address, which is a privacy concern and isn't accessible from a web browser anyway. Per the spec, this tool sets the multicast bit and uses random bytes for the node field, which is the standard, safe substitute.

Can I generate UUIDs without hyphens or in uppercase?

Yes. Use the Hyphens, Uppercase, and Quotes toggles to format the output. This is handy when pasting into languages or systems that expect a specific format, such as a 32-character hyphen-free string.

Is anything sent to a server?

No. All UUIDs are generated locally in your browser using the Web Crypto API. Nothing is requested from or transmitted to any server.

UUID generator guide: v4, v1, and what UUID primary keys cost

A UUID is a 128-bit identifier written as 32 hexadecimal digits in an 8-4-4-4-12 grouping. Its entire point is that any machine can mint one without consulting a coordinator and the result is still safe to use as a key. That property is why UUIDs are the default identifier in distributed systems, event streams, offline-first mobile clients, and anywhere a client needs to name a record before the server has ever seen it.

This tool generates three of them: version 4 (random), version 1 (time-based) and the nil UUID, in batches of 1 to 100, with toggles for hyphens, letter case and surrounding double quotes. It does not generate versions 3, 5, 6 or 7. If you specifically need the time-sortable version 7 from RFC 9562, you need a library — the FAQs below explain what that version does differently and why it was added.

Only 122 of the 128 bits in a version 4 UUID are random: four bits encode the version and two encode the variant. That is why every v4 has a 4 as the first character of the third group and one of 8, 9, a or b as the first character of the fourth. Those fixed positions are a quick way to tell, from a log line alone, which version of UUID you are actually looking at.

How it works

Version 4 uses crypto.randomUUID() where the browser provides it, and otherwise falls back to crypto.getRandomValues() over 16 bytes, forcing the version nibble to 4 and the variant bits to 10xx. Both paths draw from the platform's cryptographically secure random number generator rather than Math.random(), so the values are unpredictable as well as unlikely to repeat.

Version 1 encodes a 60-bit timestamp counted in 100-nanosecond intervals since 15 October 1582, the day the Gregorian calendar took effect; the constant offset between that epoch and the Unix epoch is 122192928000000000. A browser cannot read the machine's MAC address, and embedding it was always a privacy problem, so this generator fills the 48-bit node field with random bytes and sets the multicast bit — the substitution RFC 4122 section 4.5 explicitly allows. The 14-bit clock sequence is likewise random on every call.

Formatting is applied after generation in a fixed order: hyphens are stripped first if that toggle is off, then the case is normalised, then the quotes are wrapped around the result. The nil UUID is not generated at all — it is the constant 00000000-0000-0000-0000-000000000000, which the specification reserves as the 'no value here' sentinel.

Common uses

  • Seed test fixtures, migration scripts or API request bodies with realistic identifiers instead of 1, 2 and 3.
  • Mint a correlation or trace ID by hand while reproducing a distributed-tracing problem across services.
  • Generate 100 keys in one click for a load test or a bulk-insert script, then take them all as newline-separated text with Copy all.
  • Produce the hyphen-free 32-character form for systems that store UUIDs as CHAR(32) or embed them in a path segment.
  • Get the nil UUID without typing 32 zeros, for a default value, a placeholder tenant, or a deliberately empty foreign key in a fixture.
  • Create idempotency keys for a payment or order API so a retried request does not double-charge.
  • Generate v1 samples to check that a parser reads the version nibble rather than assuming everything it receives is v4.

Before you rely on the result

  • A version 1 UUID is not a secret. Its timestamp is predictable and its structure is visible, so seeing one narrows the next one considerably. Never use v1 for password-reset tokens, session identifiers or unguessable URLs. A v4 from the platform CSPRNG is fine for those, at 122 bits of entropy.
  • Version 1 UUIDs do not sort by time when compared as strings. The timestamp is split across time_low, time_mid and time_hi with the least significant bits first, so lexicographic ordering scrambles creation order completely. This is the precise defect that versions 6 and 7 were later defined to fix.
  • The sub-millisecond component in this generator's v1 output is random rather than a monotonic counter, so two v1 UUIDs minted within the same millisecond are not guaranteed to be ordered relative to one another. Treat v1 here as roughly time-stamped, never as a sequence you can sort on.
  • Think before storing a UUID as CHAR(36) in a hot table. In MySQL prefer BINARY(16) populated with UUID_TO_BIN(uuid, 1) — that second argument swaps the time fields of a v1 UUID so the stored values become index-friendly. PostgreSQL has a native uuid type that already stores 16 bytes rather than 36 characters.
  • Random v4 primary keys scatter inserts across the whole index. InnoDB physically clusters the table on the primary key, so random keys cause page splits and a poor buffer-pool hit rate, and every secondary index carries a full copy of that 16-byte key. If insert throughput matters, either use a time-ordered identifier or keep an internal auto-increment key and expose the UUID as a separate indexed column.
  • The hyphen and case toggles change presentation, not identity. 550E8400-E29B-41D4-A716-446655440000 and 550e8400e29b41d4a716446655440000 are the same 128 bits, but a database column comparing them as strings will disagree. Normalise to one canonical form at the boundary of your system.
  • This tool does not emit the Microsoft registry format with surrounding braces. If your target expects that shape, add the braces yourself after copying — the Quotes toggle wraps in double quotes, not braces.