DNS Checker.eu

UUID and ULID Generator

A UUID generator that runs in your browser: up to 100 UUID v4 values from crypto.randomUUID, or time-sortable ULIDs, ready to paste into code, fixtures or database seeds.

Generated with crypto.randomUUID() - cryptographically random, 122 bits of entropy.

About UUID and ULID Generator

Choose UUID v4 or ULID, say how many you want up to 100, and the list appears immediately with a copy button on each row and one for the whole block. It is the small task that interrupts real work: seeding a table, writing a test fixture, filling in a correlation id by hand, naming a tenant. Generating the values locally means nobody else ever sees them, which matters once they become primary keys or appear as tokens in a URL.

RFC 9562, which replaced RFC 4122, defines the UUID formats. Version 4 fills the identifier with random data except for the six bits that pin the version and variant, leaving 122 bits of entropy, which is ample: collisions are not a practical concern. The real failure mode is elsewhere. Because consecutive v4 values are unrelated, using them as a clustered primary key scatters inserts across a B-tree index, causing page splits, poor cache locality and index bloat on write-heavy tables. A ULID puts a 48-bit millisecond timestamp first, so identifiers created in sequence sort next to each other.

UUIDs come from crypto.randomUUID, the browser's own implementation backed by a cryptographically secure generator, not a shim seeded from Math.random. ULIDs are assembled here from Date.now for the 48-bit time component and crypto.getRandomValues for the 80 random bits, encoded in Crockford base32, which omits I, L, O and U so a value read aloud or typed off a screenshot is harder to garble. Both run entirely in the page: no request is made, nothing is logged, and the identifiers exist only in your browser until you copy them.

How to use it

  1. 1Pick UUID v4 (random, RFC 9562) or ULID (sortable by time) from the identifier type dropdown.
  2. 2Set how many you need, from 1 to 100.
  3. 3Select Generate; the batch appears at once, with a note under the controls describing what the chosen format guarantees.
  4. 4Copy a single value with the button on its row, or the whole batch with the button in the panel header.
  5. 5Press Generate again for an entirely fresh set - nothing is retained between clicks.

Common use cases

  • -Seeding a development database with a batch of primary keys that cannot collide with production data.
  • -Writing test fixtures that need syntactically valid, stable UUIDs rather than hand-typed placeholders.
  • -Choosing ULIDs for a high-insert table so new rows land together in the index instead of scattering across it.
  • -Generating a correlation or request id by hand while reproducing a trace across several services.
  • -Creating an unguessable path segment or invitation token where 122 bits of entropy is the property you rely on.

Frequently asked questions

What is the difference between a UUID and a ULID?
A UUID v4 is 128 bits of mostly random data written as 36 hexadecimal characters with dashes, defined by RFC 9562. A ULID is 26 Crockford base32 characters: a 48-bit millisecond timestamp followed by 80 random bits. Both are effectively collision-free, but ULIDs sort lexicographically by creation time, so they double as a rough ordering and behave better as database keys.
Are UUID v4 values safe to use as security tokens?
A v4 UUID from a cryptographically secure generator carries 122 bits of entropy, well beyond brute force, so it is acceptable as an unguessable identifier. Two caveats: it must come from a CSPRNG such as crypto.randomUUID rather than Math.random, and a UUID is an identifier, not a credential. It has no expiry, no scope and no signature, so anything needing those wants a real token.
Why are random UUIDs bad primary keys?
Because they carry no order. Each insert lands at a random point in a B-tree index, which causes page splits, spreads the working set across memory and inflates the index compared with a monotonically increasing key. On a write-heavy table the effect is measurable. Time-prefixed identifiers such as ULIDs, or UUID version 7 from RFC 9562, keep inserts clustered while staying globally unique.
How many UUIDs can I generate before a collision?
In practical terms, more than you will ever create. With 122 random bits, the chance of a duplicate among 103 trillion version 4 UUIDs is roughly one in a billion. What actually causes duplicates in the field is a weak random source - a generator seeded from the clock, or from Math.random - which is why this tool uses crypto.randomUUID.