About this UUID generator
A small, dependency-free tool for one job: producing correctly-formed version 4 and version 7 UUIDs in bulk, entirely on your device. No account, no upload, and nothing you generate is ever recorded.
Why it exists
Most UUID generators online do one thing — give you a single random string — and stop there. What is often missing is bulk generation with the format your codebase actually needs (uppercase, no hyphens, a quoted list ready to paste into a SQL seed script or a JSON fixture), and a proper implementation of version 7, which is newer and much less commonly offered than version 4 even though it is now the better default for a lot of database work.
So this page does both versions properly, explains the difference honestly, and includes a small inspector so you can check the version and variant of any UUID you already have — not just ones generated here.
How the generation is implemented
Randomness comes from the Web Crypto API: crypto.randomUUID() directly where the browser supports it for version 4, and crypto.getRandomValues() feeding a small pure-logic module for everything else, including all of version 7. Nothing here uses Math.random, which is not specified to be cryptographically unpredictable and has no business generating identifiers.
The bit-level logic — setting the version nibble, forcing the variant bits to 10xx, packing a 48-bit millisecond timestamp into the first six bytes for v7 — lives in a single module (uuid.js) that takes its randomness and its timestamp as plain arguments rather than reaching for crypto or Date.now() itself. That is what makes it possible to hand the exact same code fixed, known inputs and check the output byte-for-byte, which is how it was tested before this page shipped.
How it was verified
The generation module was run under Node against fixed inputs with known, hand-checked outputs before this page shipped:
| Case | Checked | Result |
|---|---|---|
| All-zero 16-byte input, v4 | Full output equals a fixed expected string with version/variant nibbles set correctly | exact match |
| All-0xff 16-byte input, v4 | Version and variant nibbles are still forced correctly even when every other bit is 1 | exact match |
| 1000 v4 UUIDs from random bytes | Every one of the 1000 generated strings is unique | zero duplicates |
| Fixed timestamp, all-zero random tail, v7 | First 12 hex characters equal the timestamp in big-endian hex; version/variant nibbles correct | exact match |
| 50 v7 UUIDs at increasing millisecond timestamps | Every string sorts strictly after the previous one as plain text | strictly ascending |
| Two v7 UUIDs at the identical millisecond | Both share the same 48-bit timestamp prefix, differ only after it | as expected |
| Hyphen/uppercase/quoted-list formatting | Each option applies independently and combines correctly with the others | match |
| Count clamping at 0, negative, 1500, and non-numeric input | Clamps to 1 or 1000 as appropriate and reports that it clamped | match |
27 checks in total, all passing, run against the identical module this page loads — not a reimplementation kept separately.
How the site is built
- Static HTML, one small stylesheet, two small scripts. No framework, no build step, no bundler.
- Nothing is fetched from the network to generate a UUID. No CDN library, no remote font, no analytics beacon; the favicon is an inline SVG data URI. Once the page has loaded, generation keeps working offline.
- System font stack. Your operating system's UI font, so nothing has to download and nothing shifts as the page loads.
- Nothing you generate is transmitted. Generation, formatting, copying and the inspector all run in your browser; there is no server call involved anywhere in the flow.
- Dark mode follows your system setting via
prefers-color-scheme.
Scope and honesty about limits
This implements UUID versions 4 and 7 from RFC 9562 and nothing else. It does not generate v1 (MAC address plus timestamp), v3 or v5 (deterministic namespace hashes), v6 (reordered timestamp), or v8 (custom/vendor-defined layout) — see the FAQ on the main page for why each was left out.
A UUID is an identifier, not a credential or a cryptographic proof of anything. This tool makes no claim about a generated value being suitable as a secret, a signed token, or a substitute for authentication.