A pure PHP library to generate and validate universally unique identifiers (UUIDs) according to RFC 4122 and RFC 9562 standards. Support for UUID versions 1, 3, 4, 5, 6, 7, and 8.

Maintainers

👁 webpatser

Package info

github.com/webpatser/uuid

pkg:composer/webpatser/uuid

Statistics

Installs: 73 302

Dependents: 1

Suggesters: 0

Stars: 1

Open Issues: 0

v2.0.0 2026-03-20 07:04 UTC

Requires

  • php: ^8.5

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 181b552fdaa3fb08bc3a16eebd61e806c7987391

  • Christoph Kempen <christoph.woop@downsized.nl>

randomuuididentifierguidrfc4122rfc9562

This package is auto-updated.

Last update: 2026-06-17 09:47:03 UTC


README

👁 Latest Version
👁 Total Downloads
👁 License

A pure PHP library to generate and validate universally unique identifiers (UUIDs) according to RFC 4122 and RFC 9562 standards. Supports UUID versions 1, 3, 4, 5, 6, 7, and 8.

Requirements: PHP ^8.5 (no extensions required)

Installation

composer require webpatser/uuid

Quick Start

use Webpatser\Uuid\Uuid;

// Generate UUIDs
$uuid4 = Uuid::v4(); // Random (recommended for general use)
$uuid7 = Uuid::v7(); // Time-ordered (recommended for databases)
$uuid1 = Uuid::generate(1); // Time-based with MAC address
$uuid3 = Uuid::generate(3, 'example.com', Uuid::NS_DNS); // Name-based (MD5)
$uuid5 = Uuid::generate(5, 'example.com', Uuid::NS_DNS); // Name-based (SHA-1)
$uuid6 = Uuid::generate(6); // Reordered time-based
$uuid8 = Uuid::generate(8); // Custom/vendor-specific

echo (string) $uuid4; // e.g., "550e8400-e29b-41d4-a716-446655440000"

API Reference

Generation

Method Description
Uuid::v4() Generate random UUID (version 4)
Uuid::v7() Generate time-ordered UUID (version 7)
Uuid::generate(int $ver, mixed $node = null, ?string $ns = null) Generate any version (1, 3, 4, 5, 6, 7, 8)
Uuid::nil() Create nil UUID (all zeros)

Import & Validation

Method Description
Uuid::import(string $uuid) Import a UUID string
Uuid::validate(mixed $uuid) Check if string is valid UUID format
Uuid::compare(string $a, string $b) Compare two UUIDs (case-insensitive)
Uuid::isNilUuid(mixed $uuid) Check if UUID is nil

Properties

$uuid = Uuid::v7();

$uuid->string; // "019d05e8-dfa1-7009-a8f7-4e1c868ccfa4"
$uuid->hex; // "019d05e8dfa17009a8f74e1c868ccfa4"
$uuid->bytes; // 16-byte binary string
$uuid->urn; // "urn:uuid:019d05e8-dfa1-7009-a8f7-4e1c868ccfa4"
$uuid->version; // 7
$uuid->variant; // 1 (RFC 4122)
$uuid->time; // 1773920640.936 (Unix timestamp, V1/V6/V7 only)
$uuid->node; // MAC address hex (V1/V6 only, null for others)

SQL Server GUID Support

SQL Server stores GUIDs with mixed endianness. These methods handle the byte-order conversion:

// Import from SQL Server
$uuid = Uuid::importFromSqlServer('825B076B-44EC-E511-80DC-00155D0ABC54');

// Export to SQL Server format
$sqlGuid = $uuid->toSqlServer(); // String format
$sqlBin = $uuid->toSqlServerBinary(); // 16-byte binary

Benchmarking

$result = Uuid::benchmark(10000, 7);
// Returns: version, iterations, total_time_ms, avg_time_us, memory_used_bytes, uuids_per_second

Run the benchmark script to compare versions:

php examples/benchmark.php 10000

Name-Based UUID Namespaces

Uuid::NS_DNS; // 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Uuid::NS_URL; // 6ba7b811-9dad-11d1-80b4-00c04fd430c8
Uuid::NS_OID; // 6ba7b812-9dad-11d1-80b4-00c04fd430c8
Uuid::NS_X500; // 6ba7b814-9dad-11d1-80b4-00c04fd430c8

Features

  • UUID versions 1, 3, 4, 5, 6, 7, and 8 (RFC 4122 + RFC 9562)
  • SQL Server GUID byte-order conversion
  • Monotonic V7 UUIDs with 12-bit sub-millisecond sequence
  • #[\NoDiscard] attribute on all factory and query methods
  • array_first() PHP 8.5 native function
  • Random\Randomizer for cryptographic random bytes
  • readonly properties for immutability
  • match expressions for efficient dispatching
  • ~40% faster than ramsey/uuid on V4, ~45% on V7
  • Zero dependencies, pure PHP

License

MIT License.