UUID generator
Version 4, 7, 1, 5 or nil, one at a time or ten thousand at a press. Every identifier is made by your own browser, so no server ever holds a copy of one.
Pick a version, say how many, then copy or save the run.
1 to 10,000.
3f2a9c14-6b7d-4e58-9a01-c2d4e6f80b73Removed from this browser.
Kept in this browser only. Create an account to keep them on every device.
Nothing is uploaded and nothing is fetched. The bytes come from your own browser's crypto.getRandomValues, which is the same source your operating system gives a TLS key, and no server ever sees an identifier this page makes. The last ten runs stay in this browser.
How to generate a UUID
Pick a version
Version 4 for a random identifier, 7 for one that sorts, 1 for the legacy format, 5 for a repeatable hash of a name, or nil.
Say how many, and how they should look
One, or up to ten thousand. Uppercase, braces and hyphens are switches, and the whole run can come out as plain lines, a JSON array or CSV.
Copy it or save it
One press copies the whole run, or downloads it as a .txt, .json or .csv file. Nothing is sent anywhere at any point.
Using the UUID generator
Every control on the panel, what it does, and when you would touch it. The tool opens on a single version 4 identifier, which is what most people came for, so you can copy and leave without reading any of this.
The version cards
Version decides what the 128 bits actually contain. It is the only choice here that changes the identifier rather than how it is written, so each card carries its own reason.
| Card | What you get | When to pick it |
|---|---|---|
| v4 · Random | 122 random bits, 6 fixed. | The default. Anything that just needs to be unique. |
| v7 · Time-ordered | 48-bit millisecond timestamp, a counter, then random bits. | A database primary key. It sorts and indexes in insert order. |
| v1 · Timestamp | A 100-nanosecond clock since 1582, plus a node field. | Only when something you do not control demands version 1. |
| v5 · Name-based | SHA-1 of a namespace and a name, truncated to 128 bits. | When the same input must always give the same identifier. |
| Nil | All 128 bits zero. | A placeholder meaning "no value", where null is not allowed. |
Arrow keys move between the cards, so the whole picker works from the keyboard. The guide has the measurements behind each recommendation, including what version 7 does to an index that version 4 does not.
How many, and the presets
Type any number from 1 to 10,000, or press one of the five presets. The chips are the counts people actually ask for: one to paste, five for a fixture, a hundred for a seeded table, a thousand for a load test. Pressing Enter in the number box generates again without touching the mouse.
The result changes shape with the count, and deliberately. One identifier gets the whole panel at a size you can read across a desk. Two to a hundred come back as a numbered list with a copy button on every row. Past a hundred, or in JSON or CSV, it becomes one scrollable block, because nobody scrolls a thousand rows looking for row 604.
Version 5 and Nil lock the count to one. Version 5 because it is deterministic, and Nil because there is exactly one nil UUID. The box goes quiet with a line saying which, rather than accepting a number and ignoring it.
Namespace and name, for version 5
These two fields appear only on version 5, because they mean nothing for the other four. The namespace is a UUID that scopes the name, and the four in the menu are the ones named in the RFC.
| Namespace | Use it for |
|---|---|
| DNS | A hostname, like api.example.com. |
| URL | A full URL, including the scheme. |
| OID | An ISO object identifier, in dotted form. |
| X.500 | A directory distinguished name. |
| Custom | Your own namespace UUID, for identifiers scoped to your system. |
Pick Custom and a second box appears for the namespace itself. It has to be a valid UUID, and the tool says so rather than hashing whatever you typed. Generating one with version 4 and keeping it in your codebase is the usual way to get a namespace of your own.
Output and the three style switches
Output decides the file, the switches decide the characters. They are independent, so you can have uppercase identifiers inside a JSON array if that is what your system wants.
| Control | Effect |
|---|---|
| Plain | One identifier per line. Downloads as .txt. |
| JSON | An indented array of strings, ready for a fixture or a seed script. Downloads as .json. |
| CSV | An index,uuid header and a row number per line, so the run can be joined back to whatever consumed it. Downloads as .csv. |
| Uppercase | Hex digits in capitals, which is the form SQL Server and .NET print. |
| Braces | Wraps each identifier in { and }, the Microsoft registry form. |
| Hyphens | On by default. Off gives the 32-character form some schemas store. |
Changing a switch or the output format rewrites the identifiers already on screen rather than making new ones. Only the version and the count generate a fresh run, so if you liked a particular identifier and want it in braces, you keep that identifier.
Copy, download and the run before this one
Copy all puts the whole output on your clipboard in the format shown. The button on a list row copies that one identifier alone. Download saves the same text as a file, named for how many are in it.
A run is written to the strip under the tool when you copy or download it, and nowhere else. Changing a control is not finishing with something, so nothing is recorded until you take the result. The last ten runs stay in this browser. The identifiers themselves are kept, not just the settings, because every version except 5 makes different output from identical inputs and handing back a fresh run would not be the one you had.
Reading a UUID back apart
The box at the bottom takes an identifier you already have and tells you what is inside it. It reads as you type and needs no button.
| It reports | Which answers |
|---|---|
| Valid or not | Whether it is 32 hex digits, and whether the hyphens are in the right places. |
| Version | Which of the eight versions made it, or that the number is not a version at all. |
| Variant | RFC 9562, or one of the three reserved layouts. A Microsoft-variant GUID's version digit means nothing, and the readout says so instead of inventing a version. |
| Made at | The exact moment, for a version 1, 6 or 7. This is the field that makes those versions leak. |
| Node | For a version 1: the node field, and whether the multicast bit marks it as random or as a real MAC address. |
It also recognises the nil UUID and the max UUID by name, and accepts braces, the urn:uuid: prefix and the unhyphenated form without complaint.
What this tool will not do
Four gaps, all of them deliberate. Saying where a tool stops is more useful than a longer feature list.
| Missing | Why |
|---|---|
| Version 3 | It is version 5 over MD5, and the Web Crypto API has no MD5. Shipping a hash implementation to every visitor to support a version the RFC already tells you not to choose is a poor trade. Use version 5. |
| Version 2 | DCE Security. Never fully specified outside DCE 1.1, and it wastes half the timestamp on a POSIX user id. Nothing new should use it. |
| Version 6 | It exists to rescue an estate that already uses version 1, by reordering the same fields so they sort. If you are choosing freely, version 7 is the one the RFC points you at. |
| A real MAC address in version 1 | A browser cannot read one, and should not be able to. The node here is random with the multicast bit set, exactly as RFC 9562 §6.10 says to do it, and the reader will confirm that on any identifier this page makes. |
| More than 10,000 at once | Ten thousand is 370 KB of text and lands in a few milliseconds. A hundred thousand is 3.7 MB and Safari on a phone takes visible seconds to put it in a text box. The limit is set where the tool still feels instant. |
Where these identifiers come from
crypto.getRandomValues, which is your operating system's cryptographic random number generator behind a browser API. It is the same source a TLS session key comes from. It is not Math.random, which is fast, predictable, and the origin of most real duplicate-ID incidents.
One detail is worth knowing because it is why this page is quick. A batch is filled from a single call over one buffer rather than from ten thousand separate calls, so the expensive part of the work happens once. Ten thousand version 4 identifiers took 23.4 ms in Chrome 152 on an Apple M1 Max, measured on 2 September 2026, from the press to the whole run on screen. The guide has the full timings and the method.
Nothing is uploaded and nothing is fetched. There is no request to opt out of, because there is no request. The last ten runs stay in this browser under a key you can clear from your history.
Frequently asked questions
Are these UUIDs generated on your server?
No, and the page never asks one. The bytes come from crypto.getRandomValues in your own browser, which is the same generator the platform uses for a TLS session key. Open your network panel and press Generate again as many times as you like: there is no request. That is not the norm in this category. Two of the tools currently ranking above this page fetch every identifier over HTTP, so their server holds a copy of every ID they have ever handed out.
Can two of these collide?
In practice, no. A version 4 UUID carries 122 random bits, so you would need to generate about 2.7 quintillion of them before a single collision reached even a one in a billion chance. At ten thousand a press, that is more presses than there are seconds in the life of the sun. The number that actually matters is where the randomness came from, and this page uses the operating system CSPRNG rather than Math.random, which is where real duplicate-ID incidents come from.
Which version should I use?
Version 4 unless you have a reason. Reach for version 7 when the identifier is going to be a database primary key, because it starts with a timestamp and therefore sorts and indexes in insert order. Version 5 when you need the same input to keep producing the same identifier on every machine. Version 1 only when something you do not control demands it. The guide compares them with the measurements behind each recommendation.
Is a GUID the same thing as a UUID?
Yes. GUID is Microsoft’s name for the same 128-bit value, and a GUID from .NET or SQL Server is a UUID that follows the same RFC. The only differences are cosmetic: Microsoft tools tend to print them in braces and often in uppercase, and SELECT NEWID() in SQL Server returns an uppercase version 4. Switch the Uppercase and Braces boxes on and this tool produces exactly that form.
Why is the count locked to one for version 5?
Because version 5 is deterministic. It is a hash of a namespace and a name, so the same two inputs give the same identifier every time, on every machine, forever. Asking for a hundred would give you one identifier printed a hundred times. Change the name and you get a different identifier, which is the whole point of the version.
What does the reader at the bottom do?
It takes a UUID apart. Paste one and it tells you the version, the variant, and for a version 1, 6 or 7 the exact moment it was created. It also says whether a version 1 node is a real MAC address or a random one, which is worth checking on any identifier that came from someone else’s server. It accepts braces, the urn:uuid: prefix and the unhyphenated 32-character form, because those are what actually get pasted out of C#, out of a URL and out of a database column.