Developer Tools8 min readUpdated: 2026-10-12

UUID (Universally Unique Identifier)

Definition

A UUID (Universally Unique Identifier), also known as a GUID in Microsoft ecosystems, is a 128-bit numerical label standardized under RFC 4122 and RFC 9562, generated cryptographically across distributed systems without requiring a central coordinating authority.

UUID (Universally Unique Identif...: Technical Breakdown

In traditional relational databases (like MySQL or PostgreSQL), records historically used auto-incrementing sequential integers (`1, 2, 3...`) as primary keys. However, sequential IDs cause major engineering bottlenecks in distributed microservices, multi-region architectures, and sharded databases because nodes must constantly communicate with a central coordinator to negotiate the next integer. A UUID solves this problem by using 128 bits of cryptographic randomness or timestamp-ordered entropy. Because the total number of possible UUIDs is astronomical ($2^{128} \approx 3.4 \times 10^{38}$), distributed computers can generate IDs independently across the globe with mathematical guarantee that collision is practically impossible.

Key Technical Specifications

  • Governing Standards: IETF RFC 4122 and the modern updated IETF RFC 9562 (published May 2024).
  • Bit Length & Formatting: 128 bits represented as a 36-character hexadecimal string in five hyphen-separated groups: `8-4-4-4-12` (e.g., `f47ac10b-58cc-4372-a567-0e02b2c3d479`).
  • Version & Variant Nibbles: Position 13 specifies the UUID Version (1, 4, 7); Position 17 specifies the Variant (typically `8`, `9`, `a`, or `b` for RFC 4122).
  • UUID v4 (Random): Composed of 122 bits of cryptographically secure random entropy.
  • UUID v7 (Timestamp-Ordered): Features a 48-bit Unix epoch millisecond timestamp followed by random entropy, optimizing B-tree database index performance.

1. The 128-Bit Structural Layout of a UUID

A standard UUID is composed of 32 hexadecimal characters (16 bytes = 128 bits) organized into five distinct groups: ``` f47ac10b - 58cc - 4372 - a567 - 0e02b2c3d479 \______/ \__/ \__/ \__/ \__________/ 8 hex 4 hex 4 hex 4 hex 12 hex digits digits digits digits digits ``` Critical Identification Bits: • Version Indicator: The first character of the third group (`4372` -> version `4`). • Variant Indicator: The first character of the fourth group (`a567` -> variant `a` = RFC 4122).

2. Master UUID Version Comparison Matrix (RFC 9562)

Evaluating UUID versions and their optimal production engineering applications:
UUID VersionGeneration BasisTimestamp OrderedPrivacy & SecurityPrimary Engineering Use Case
Version 160-bit timestamp + MAC addressYesPOOR: Leaks hardware MAC address & exact timeLegacy telecommunications systems
Version 3MD5 namespace hashNo (Deterministic)WEAK: MD5 hash is cryptographically brokenLegacy name-based mapping
Version 4122 bits of pure pseudorandomnessNo (Unsorted)HIGH: Zero information leakageGeneral web application entities, user tokens
Version 5SHA-1 namespace hashNo (Deterministic)MODERATE: SHA-1 collision vulnerabilitiesDeterministic entity mapping
Version 748-bit Unix ms timestamp + 74-bit randomYES (Monotonically sorted)HIGH: Replaces v1; optimal for DB indexingModern database primary keys (Postgres, MySQL)

3. Generating Cryptographic UUID v4 and v7 in TypeScript

How to generate cryptographically secure UUIDs in modern browsers and Node.js:
uuidGenerators.tstypescript
// Native Web Crypto API UUID v4 (Supported in all modern browsers and Node 16+)
export function generateUuidV4(): string {
  return crypto.randomUUID();
}

// RFC 9562 UUID v7 Implementation (Timestamp-ordered primary keys)
export function generateUuidV7(): string {
  const now = Date.now(); // 48-bit Unix millisecond timestamp
  const bytes = new Uint8Array(16);
  crypto.getRandomValues(bytes);

  // Write 48-bit timestamp into bytes 0..5
  bytes[0] = (now / 0x10000000000) & 0xff;
  bytes[1] = (now / 0x100000000) & 0xff;
  bytes[2] = (now / 0x1000000) & 0xff;
  bytes[3] = (now / 0x10000) & 0xff;
  bytes[4] = (now / 0x100) & 0xff;
  bytes[5] = now & 0xff;

  // Set Version 7 (0111) in byte 6
  bytes[6] = (bytes[6] & 0x0f) | 0x70;
  // Set Variant 10xx (RFC 4122) in byte 8
  bytes[8] = (bytes[8] & 0x3f) | 0x80;

  const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
}

UUID (Universally Unique Identif... Misconceptions

❌ Myth: “UUID collisions happen frequently if millions of IDs are generated.”

✅ Reality: False. With UUID v4 (122 random bits), to achieve even a 50% chance of a single collision (the Birthday Problem), a system would need to generate over 2.71 quintillion UUIDs ($2.71 \times 10^{18}$). Generating a billion UUIDs every second for 85 years yields a negligible collision risk.

❌ Myth: “GUID and UUID are completely different standards.”

✅ Reality: False. GUID (Globally Unique Identifier) is Microsoft's implementation and terminology for the standard UUID defined in RFC 4122. They share the identical 128-bit data layout.

❌ Myth: “UUID v4 is ideal for relational database primary keys.”

✅ Reality: False for heavy write workloads. Because UUID v4 is completely random, inserting millions of random IDs causes massive B-Tree index fragmentation. UUID v7 solves this by front-loading a millisecond timestamp.

Tools for UUID (Universally Unique Identif...

Apply this concept directly using our free client-side browser utilities:

UUID (Universally Unique Identifier) FAQs

Why not just use auto-incrementing integer IDs (1, 2, 3)?

Sequential integers create two major hazards: 1) Security: Attackers can guess IDs through enumeration attacks (/users/100, /users/101), exposing company growth metrics and customer data; 2) Scalability: Multiple database nodes cannot generate sequential numbers simultaneously without locking.

What is the difference between UUID v4 and UUID v7?

UUID v4 is entirely random (except for version bits), making it ideal for session tokens and unindexed IDs. UUID v7 combines a 48-bit Unix millisecond timestamp with random entropy, making IDs naturally sortable chronologically, drastically accelerating database B-tree indexing.

Can you decode a UUID v4 back to its original input?

No. UUID v4 contains pure pseudorandom entropy generated from cryptographic sources. It contains no encrypted payload and cannot be 'decoded'.

Concepts for UUID (Universally Unique Identif...

Guides for UUID (Universally Unique Identif...