How to use this UUID Bulk Generator
Choose how many UUIDs you want to create, generate the list, then copy or download the
results for use in your project, test data, or workflow.
- Enter the number of UUIDs you want to generate.
- Click Generate Bulk UUIDs.
- Review the generated UUID list in the output area.
- Copy or download the result.
Example output
550e8400-e29b-41d4-a716-446655440000
9f6b2b4a-98b3-4d52-8f8e-73e4a63f8f7a
e19f0b29-2b10-4fc0-98d1-b0f3e860d2db
Common use cases
- Database seed data
- Test payload creation
- Mock API responses
- Unique record IDs
- Development fixtures
In bulk, the random source is the whole ballgame
A version 4 UUID is a 128-bit value with 122 bits of randomness (the other
six are fixed version and variant bits). Its famous uniqueness guarantee is not a property
of the format — it is a property of the random number generator behind it. That is why this
tool draws from crypto.getRandomValues(), the browser's cryptographically secure
generator, rather than Math.random().
The distinction barely matters when you make one ID; it matters a great deal when you make
hundreds or thousands in a loop. Math.random() is a fast, non-cryptographic PRNG
with limited internal state, so IDs produced in a tight batch can be correlated or
short-cycled in ways that quietly raise the real collision rate. A weak generator turns the
reassuring collision math below into a false promise, so for any batch you intend to store,
insist on a CSPRNG.
Could a batch contain a duplicate? The numbers
With 122 random bits there are about 5.3 × 1036 possible v4 UUIDs. The
probability of a collision follows the birthday bound, and at the scales a seed dataset
reaches it is vanishingly small. Generate a million UUIDs and the chance
that any two of them match is on the order of 10-25 — far less likely than a
specific bit in memory flipping from cosmic radiation.
You would need to generate roughly 2.7 × 1018 UUIDs before
reaching a 50% chance of a single duplicate. So for bulk fixtures, imports, and mock records,
duplicates from good randomness are not a real concern. Practical collisions come from
bugs — reusing a seed, copying a batch twice, or a broken generator — not from the birthday
math.
For seed data headed into a database, weigh v4 against v7
v4 UUIDs are uniformly random, which means a bulk insert of them scatters rows across the
index instead of appending in order. In a clustered-index engine like MySQL's InnoDB — where
the table is physically stored in primary-key order — loading a large batch of random keys
causes repeated page splits and buffer-pool churn, and the import runs slower than it should.
UUID v7 (standardised in RFC 9562, 2024) puts a millisecond timestamp in its
leading bits, so values sort roughly by creation time and bulk inserts append near the right
edge of the index — the same friendly pattern an auto-increment key gives you, while still
being generatable anywhere. The trade-off is that v7 embeds creation time, which you may not
want exposed. This tool emits v4; if you are seeding a large table and insert performance or
time-ordering matters, generating v7 on the database side is often the better call.
Storing thousands of UUIDs without wasting space
The overhead of storing a UUID as text multiplies across a bulk dataset. The hyphenated
string form is 36 characters; stored as CHAR(36) that is 36 bytes to hold 16
bytes of actual data, on every row, plus a collation on each comparison. Across a
table with several secondary indexes — InnoDB appends the primary key to each one — the
waste compounds fast.
Store the 16 bytes directly. PostgreSQL has a native uuid type; MySQL should use
BINARY(16) with UUID_TO_BIN() and BIN_TO_UUID() at the
boundaries. And treat the all-zero value
00000000-0000-0000-0000-000000000000 as reserved — it is the "nil" UUID and
almost always signals an uninitialised field rather than a real ID.
Frequently Asked Questions
What version does this generate, and how random is it?
Version 4, with 122 random bits drawn from crypto.getRandomValues() — the
browser's cryptographically secure generator — not Math.random(). That
matters most in bulk, where a weak generator can correlate the IDs it produces in a
batch.
Could a large batch accidentally contain a duplicate?
With good randomness, no in any practical sense. Generating a million v4 UUIDs carries a
collision probability around 10-25. You would need about 2.7 ×
1018 of them for a coin-flip chance of one duplicate. Real duplicates come from
bugs, not the math.
Should seed data use v4 or v7?
For a large table where insert speed or time-ordering matters, v7 is usually better — its
time-based prefix keeps bulk inserts at the right edge of the index instead of scattering
them. Choose v4 when you specifically do not want creation time embedded in the ID.
How should I store thousands of these in a database?
As 16 bytes, not 36 characters. Use PostgreSQL's native uuid type or MySQL's
BINARY(16) with UUID_TO_BIN(). Avoid CHAR(36),
whose per-row waste multiplies across every row and secondary index.
Can I reproduce the same set of UUIDs for repeatable tests?
Not from this tool — CSPRNG output is non-deterministic by design, so each run differs.
For repeatable fixtures, save a generated batch to a file and commit it, or use name-based
UUID v5 (a hash of a namespace plus a name), which yields the same UUID
for the same input every time.
Can two separate batches overlap?
With a proper CSPRNG the odds are negligible even across many batches, because each UUID
is drawn independently. The realistic overlap risk is operational — copying or importing
the same batch twice — so guard your import steps rather than the randomness.