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.

v4: bytes[6] = (bytes[6] & 0x0f) | 0x40 // version 4 bytes[8] = (bytes[8] & 0x3f) | 0x80 // variant 10xx v7: bytes[0..5] = 48-bit big-endian ms timestamp bytes[6] = (bytes[6] & 0x0f) | 0x70 // version 7 bytes[8] = (bytes[8] & 0x3f) | 0x80 // variant 10xx

How it was verified

The generation module was run under Node against fixed inputs with known, hand-checked outputs before this page shipped:

Verification cases and results
CaseCheckedResult
All-zero 16-byte input, v4Full output equals a fixed expected string with version/variant nibbles set correctlyexact match
All-0xff 16-byte input, v4Version and variant nibbles are still forced correctly even when every other bit is 1exact match
1000 v4 UUIDs from random bytesEvery one of the 1000 generated strings is uniquezero duplicates
Fixed timestamp, all-zero random tail, v7First 12 hex characters equal the timestamp in big-endian hex; version/variant nibbles correctexact match
50 v7 UUIDs at increasing millisecond timestampsEvery string sorts strictly after the previous one as plain textstrictly ascending
Two v7 UUIDs at the identical millisecondBoth share the same 48-bit timestamp prefix, differ only after itas expected
Hyphen/uppercase/quoted-list formattingEach option applies independently and combines correctly with the othersmatch
Count clamping at 0, negative, 1500, and non-numeric inputClamps to 1 or 1000 as appropriate and reports that it clampedmatch

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.