UUID Generator Guide: Everything You Need to Know About Unique Identifiers
Every database record, every user session, every distributed transaction needs something to uniquely identify it. You could use auto-incrementing integers, but those break across multiple databases. You could use timestamps, but they reveal information about when things were created. What you need is a universally unique identifier—a UUID.
This guide covers everything from what UUIDs actually are to how to generate them and when to use each version.
What Is a UUID?
UUID stands for Universally Unique Identifier. It is a 128-bit number formatted as a string of 36 characters (32 hex digits plus 4 hyphens):
550e8400-e29b-41d4-a716-446655440000 The beauty of UUIDs is that you can generate them independently on different systems—across different servers, different databases, even different continents—without coordination. The probability of collision is astronomically low. We are talking about numbers so large that generating a billion UUIDs per second for centuries still would not give you a 50 percent chance of a single duplicate.
Our UUID Generator handles all common UUID versions instantly.
Understanding UUID Versions
Not all UUIDs are created equal. The specification defines several versions, each with different properties:
UUID Version 1: Time-Based
Combines the current timestamp and MAC address to create the identifier. The problem? It reveals when the UUID was created (bad for privacy) and exposes your MAC address (worse for security).
UUID Version 4: Random
The most common version. Generates 122 bits of randomness. No timestamp, no MAC address, just pure entropy. Perfect for most use cases. This is what most people mean when they say UUID.
UUID Version 7: Time-Ordered (New Standard)
The newer kid on the block, designed for databases. Like version 1, it is time-based, but it uses a timestamp with a random component. The key advantage: UUIDs generated later are lexically greater than earlier ones—this makes database indexing dramatically more efficient.
Other Versions
- Version 2: DCE Security variant (rarely used)
- Version 3: Name-based using MD5 (deterministic but deprecated)
- Version 5: Name-based using SHA-1 (deterministic but deprecated)
When to Use Each UUID Version
Here is a practical breakdown:
Use UUID Version 4 When:
- You need maximum unpredictability
- Privacy matters (no timestamps)
- You are generating identifiers in untrusted environments
- General-purpose unique IDs for any application
Use UUID Version 7 When:
- Database performance is critical
- You want sortability (great for B-tree indexes)
- Time-ordered IDs help with debugging
- You are building modern distributed systems
Avoid Version 1 Because:
- It exposes your MAC address
- Creates privacy concerns
- Reveals exact creation timestamp
UUIDs in Different Programming Languages
JavaScript
Modern browsers support the built-in function for generating random UUIDs. For server-side JavaScript (Node.js) or older browsers, you can use the uuid npm package with the appropriate version method.
Python
Python provides built-in support for generating random UUIDs through the uuid module. You can call the version 4 function directly.
Java
Java offers built-in UUID generation through the standard library. Simply call the static method that generates random UUIDs.
SQL Databases
Most modern databases provide functions for generating random UUIDs. PostgreSQL and MySQL 8+ both have built-in support for this.
Database Performance Considerations
Here is where things get interesting. UUIDs can be database performance traps if you are not careful.
The Problem with Random UUIDs in Databases
Random UUIDs (version 4) are terrible for B-tree indexes. Each new UUID scatters to a random position in the index, causing:
- Excessive page splits
- Index fragmentation
- Write amplification
- Slower inserts over time
The Solution: UUID Version 7
UUID version 7 fixes this by making the first portion time-based. New UUIDs cluster together, reducing index thrash. If your database supports version 7, use it for primary keys.
Alternative Strategies
ULIDs (Universally Unique Lexicographically Sortable Identifier): Another format that sorts lexicographically while preserving time ordering.
Snowflake-style IDs: Twitter is approach uses timestamp plus machine ID plus sequence. Great for distributed systems.
Composed keys: Sometimes simpler is better—use natural keys when they exist (email, username) and compound keys otherwise.
Practical Use Cases
User IDs
Generate a random UUID and store it as the unique identifier for each user in your system.
Session Tokens
Create random session tokens for user authentication. Store them in your database and associate with user accounts.
API Keys
Generate random API keys for developer access. Consider adding a purpose prefix to distinguish between different key types.
Distributed IDs
For microservices architecture, consider including a source identifier in your IDs to track which service created each record.
UUID Generator Tools
While programming languages provide UUID generation, dedicated tools offer more flexibility:
- Batch generation: Create multiple UUIDs at once
- Version selection: Choose version 4, version 7, or other versions
- Format options: Standard, uppercase, no dashes, URL-safe
- Validation: Check if existing strings are valid UUIDs
- Conversion: Transform between formats
Our UUID Generator handles all of this in your browser. For related identity tools, check out our Password Generator and Hash Generator.
Common Mistakes to Avoid
Using Version 1 in User-Facing Contexts
Never expose version 1 UUIDs to users—they reveal when accounts were created and expose MAC addresses.
Comparing UUIDs as Strings Without Normalizing
Different UUID representations might look equal but have case differences. Always normalize before comparing.
Using Random UUIDs as Database Primary Keys
On databases with B-tree indexes, version 4 UUIDs cause performance degradation. Use version 7 or consider different strategies.
Not Validating Input
If users submit UUIDs, validate them before using them in queries or storage.
UUIDs vs. Alternatives
| Identifier | Length | Sortable | Collision Risk | Use Case |
|---|---|---|---|---|
| UUID v4 | 36 chars | No | Virtually zero | General purpose |
| UUID v7 | 36 chars | Yes (time) | Virtually zero | Databases |
| ULID | 26 chars | Yes (time) | Virtually zero | Distributed systems |
| Snowflake | 18 chars | Yes (time) | With coordination | High volume |
| Auto-increment | Variable | Yes | Requires single source | Simple apps |
Frequently Asked Questions
What does a UUID look like?
A UUID is a 36-character string in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx where each x is a hexadecimal digit (0-9, a-f). Example: f47ac10b-58cc-4372-a567-0e02b2c3d479Can two systems generate the same UUID?
With UUID version 4 (random), the probability of collision is 1 in 2^122—that is roughly 1 in 5.3 times 10 to the power of 36. For practical purposes, this is zero. You would need to generate UUIDs for the entire lifetime of the universe to have a realistic chance of collision.What is the difference between UUID version 4 and version 7?
UUID version 4 is completely random—the bits have no meaning. UUID version 7 embeds a timestamp in the first portion, making IDs time-sortable. UUID version 7 is better for database primary keys because it keeps related records physically close in storage.How do I generate a UUID in JavaScript?
Modern browsers support the crypto.randomUUID function. For Node.js, use the uuid npm package and call the version 4 function.Are UUIDs secure?
UUID version 4 uses cryptographically secure random number generators, making them suitable for security tokens. However, they are predictable in sequence—if you need non-sequential unpredictable identifiers for security purposes, consider using random bytes with a purpose-specific prefix.Key Takeaways
- UUIDs provide globally unique 128-bit identifiers that can be generated independently across systems
- UUID version 4 (random) is the most common choice for general-purpose unique identifiers
- UUID version 7 (time-ordered) is better for database primary keys due to better index performance
- Avoid UUID version 1—it exposes timestamps and MAC addresses, creating privacy and security issues
- Consider performance implications when using UUIDs in databases; version 7 is preferred for indexed columns
Generate unique identifiers instantly with our free UUID Generator tool.