PHPackages                             philiprehberger/php-uuid-tools - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. philiprehberger/php-uuid-tools

ActiveLibrary[Database &amp; ORM](/categories/database)

philiprehberger/php-uuid-tools
==============================

UUID v4 and v7 generation, validation, and ordered UUIDs for database indexing

v1.3.0(2mo ago)138MITPHPPHP ^8.2CI passing

Since Mar 13Pushed 1mo agoCompare

[ Source](https://github.com/philiprehberger/php-uuid-tools)[ Packagist](https://packagist.org/packages/philiprehberger/php-uuid-tools)[ Docs](https://github.com/philiprehberger/php-uuid-tools)[ GitHub Sponsors](https://github.com/philiprehberger)[ RSS](/packages/philiprehberger-php-uuid-tools/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (6)Versions (7)Used By (0)

PHP UUID Tools
==============

[](#php-uuid-tools)

[![Tests](https://github.com/philiprehberger/php-uuid-tools/actions/workflows/tests.yml/badge.svg)](https://github.com/philiprehberger/php-uuid-tools/actions/workflows/tests.yml)[![Latest Version on Packagist](https://camo.githubusercontent.com/5aaf68d5b8db93929a805ecae6b9cfd4d8374b9cbf240afa1feac1c44331870a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7068696c69707265686265726765722f7068702d757569642d746f6f6c732e737667)](https://packagist.org/packages/philiprehberger/php-uuid-tools)[![Last updated](https://camo.githubusercontent.com/fd6cb527b0356f2baba8002bb5d871c3b79eaf22d6628843c4e136474e981527/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f7068696c69707265686265726765722f7068702d757569642d746f6f6c73)](https://github.com/philiprehberger/php-uuid-tools/commits/main)

UUID v4, v5, and v7 generation, ULID support, short ID encoding, and ordered UUIDs for database indexing.

Requirements
------------

[](#requirements)

- PHP 8.2+

Installation
------------

[](#installation)

```
composer require philiprehberger/php-uuid-tools
```

Usage
-----

[](#usage)

### Generate UUID v4

[](#generate-uuid-v4)

```
use PhilipRehberger\UuidTools\Uuid;

$uuid = Uuid::v4();
// "f47ac10b-58cc-4372-a567-0e02b2c3d479"
```

### Generate UUID v7

[](#generate-uuid-v7)

Time-ordered UUIDs with millisecond precision, ideal for database primary keys:

```
$uuid = Uuid::v7();
// "018e4f6c-1a2b-7000-8000-1234567890ab"
```

### Generate UUID v5

[](#generate-uuid-v5)

Deterministic namespace-based UUIDs using SHA-1 hashing:

```
use PhilipRehberger\UuidTools\Uuid;

$uuid = Uuid::v5(Uuid::NAMESPACE_DNS, 'example.com');
// "cfbff0d1-9375-5685-968c-48ce8b15ae17"

// Same inputs always produce the same UUID
$uuid2 = Uuid::v5(Uuid::NAMESPACE_DNS, 'example.com');
// $uuid === $uuid2

// Available namespace constants:
// Uuid::NAMESPACE_DNS, Uuid::NAMESPACE_URL,
// Uuid::NAMESPACE_OID, Uuid::NAMESPACE_X500
```

### ULID

[](#ulid)

Generate ULIDs (Universally Unique Lexicographically Sortable Identifiers):

```
use PhilipRehberger\UuidTools\Ulid;

$ulid = Ulid::generate();
// "01ARZ3NDEKTSV4RRFFQ69G5FAV"

Ulid::isValid($ulid); // true

// Convert between ULID and UUID
$uuid = Ulid::toUuid($ulid);
$ulid = Ulid::fromUuid($uuid);

// Extract timestamp (milliseconds since Unix epoch)
$ms = Ulid::timestamp($ulid);

// Decode the timestamp into a DateTimeImmutable (UTC by default)
$dt = Ulid::toDateTime($ulid);
$dtLocal = Ulid::toDateTime($ulid, new \DateTimeZone('America/New_York'));

// Convenience methods on Uuid class
$ulid = Uuid::ulid();
Uuid::isValidUlid($ulid); // true
```

### Short IDs

[](#short-ids)

Encode UUIDs as compact Base62 strings (~22 characters):

```
use PhilipRehberger\UuidTools\ShortId;

$shortId = ShortId::encode('550e8400-e29b-41d4-a716-446655440000');
// "2D5MNbitT4FNsgGOLfVm6q"

$uuid = ShortId::decode($shortId);
// "550e8400-e29b-41d4-a716-446655440000"

// Convenience methods on Uuid class
$shortId = Uuid::toShortId($uuid);
$uuid = Uuid::fromShortId($shortId);
```

### Validate a UUID

[](#validate-a-uuid)

```
Uuid::isValid('550e8400-e29b-41d4-a716-446655440000'); // true
Uuid::isValid('not-a-uuid');                            // false

// Validate many UUIDs at once; returns indices of invalid entries
Uuid::validateBatch([
    '550e8400-e29b-41d4-a716-446655440000',
    'not-a-uuid',
    '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
]);
// [1]
```

### Extract Version

[](#extract-version)

```
Uuid::version('550e8400-e29b-41d4-a716-446655440000'); // 4
Uuid::version('invalid');                               // null
```

### Binary Conversion

[](#binary-conversion)

Convert between UUID strings and 16-byte binary for compact storage:

```
$bytes = Uuid::toBytes('550e8400-e29b-41d4-a716-446655440000');
// 16-byte binary string

$uuid = Uuid::fromBytes($bytes);
// "550e8400-e29b-41d4-a716-446655440000"
```

### Ordered UUIDs

[](#ordered-uuids)

Reorder UUID fields for optimal database index performance. Puts the most-significant time bits first so UUIDs sort chronologically:

```
$uuid = Uuid::v7();
$ordered = Uuid::toOrdered($uuid);

// Store $ordered in the database for better index locality

$original = Uuid::fromOrdered($ordered);
// Recovers the original UUID
```

### Batch Generation

[](#batch-generation)

Generate multiple UUIDs at once:

```
$uuids = Uuid::batch(5);
// [
//     "f47ac10b-58cc-4372-a567-0e02b2c3d479",
//     "6ba7b810-9dad-41d1-80b4-00c04fd430c8",
//     ...
// ]

$v7Uuids = Uuid::batch(3, 7);
// Three time-ordered v7 UUIDs
```

### Comparison

[](#comparison)

```
$a = Uuid::v4();
$b = Uuid::v4();

Uuid::equals($a, $a);        // true
Uuid::equals($a, $b);        // false

Uuid::compareTo($a, $b);     // -1, 0, or 1
```

### Nil UUID

[](#nil-uuid)

```
$nil = Uuid::nil();
// "00000000-0000-0000-0000-000000000000"
```

API
---

[](#api)

MethodDescription`Uuid::v4(): string`Generate a random UUID v4`Uuid::v5(string $namespace, string $name): string`Generate a deterministic UUID v5 (SHA-1)`Uuid::v7(): string`Generate a time-ordered UUID v7`Uuid::isValid(string $uuid): bool`Validate a UUID string (any version)`Uuid::validateBatch(array $uuids): array`Return indices of invalid UUIDs in a list`Uuid::version(string $uuid): ?int`Extract the version number (null if invalid)`Uuid::toBytes(string $uuid): string`Convert UUID to 16-byte binary`Uuid::fromBytes(string $bytes): string`Convert 16-byte binary to UUID string`Uuid::toOrdered(string $uuid): string`Reorder UUID for database index performance`Uuid::fromOrdered(string $ordered): string`Reverse an ordered UUID to standard format`Uuid::equals(string $a, string $b): bool`Case-insensitive UUID equality check`Uuid::compareTo(string $a, string $b): int`Lexicographic comparison (-1, 0, 1) for sorting`Uuid::batch(int $count, int $version = 4): array`Generate multiple UUIDs at once`Uuid::nil(): string`Return the nil UUID (all zeros)`Uuid::ulid(): string`Generate a ULID`Uuid::isValidUlid(string $ulid): bool`Validate a ULID string`Uuid::toShortId(string $uuid): string`Encode UUID as Base62 short ID`Uuid::fromShortId(string $shortId): string`Decode Base62 short ID to UUID`Ulid::generate(): string`Generate a new ULID`Ulid::isValid(string $ulid): bool`Validate a ULID string`Ulid::toUuid(string $ulid): string`Convert ULID to UUID format`Ulid::fromUuid(string $uuid): string`Convert UUID to ULID format`Ulid::timestamp(string $ulid): int`Extract Unix timestamp (ms) from ULID`Ulid::toDateTime(string $ulid, ?\DateTimeZone $tz = null): \DateTimeImmutable`Decode ULID timestamp into a DateTimeImmutable (UTC default)`ShortId::encode(string $uuid): string`Encode UUID as Base62 short ID`ShortId::decode(string $shortId): string`Decode Base62 short ID to UUIDDevelopment
-----------

[](#development)

```
composer install
vendor/bin/phpunit
vendor/bin/pint --test
vendor/bin/phpstan analyse
```

Support
-------

[](#support)

If you find this project useful:

⭐ [Star the repo](https://github.com/philiprehberger/php-uuid-tools)

🐛 [Report issues](https://github.com/philiprehberger/php-uuid-tools/issues?q=is%3Aissue+is%3Aopen+label%3Abug)

💡 [Suggest features](https://github.com/philiprehberger/php-uuid-tools/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)

❤️ [Sponsor development](https://github.com/sponsors/philiprehberger)

🌐 [All Open Source Projects](https://philiprehberger.com/open-source-packages)

💻 [GitHub Profile](https://github.com/philiprehberger)

🔗 [LinkedIn Profile](https://www.linkedin.com/in/philiprehberger)

License
-------

[](#license)

[MIT](LICENSE)

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance88

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

6

Last Release

81d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/cfd7d24cbbf32400fa13ce0bbe7a31edd2d66a6d4488eafdb3d64c5337bf0435?d=identicon)[philiprehberger](/maintainers/philiprehberger)

---

Top Contributors

[![philiprehberger](https://avatars.githubusercontent.com/u/8218077?v=4)](https://github.com/philiprehberger "philiprehberger (15 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")

---

Tags

validationdatabaseuuidorderedv4v7

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/philiprehberger-php-uuid-tools/health.svg)

```
[![Health](https://phpackages.com/badges/philiprehberger-php-uuid-tools/health.svg)](https://phpackages.com/packages/philiprehberger-php-uuid-tools)
```

###  Alternatives

[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90441.8M243](/packages/ramsey-uuid-doctrine)[codezero/laravel-unique-translation

Check if a translated value in a JSON column is unique in the database.

1871.0M8](/packages/codezero-laravel-unique-translation)[openbuildings/jam

Small but feature rich ORM, has extensible models and builders, baked in upload functionality, supporting multiple backends (rackspace, ftp), polymorphic associations, form builders, nested forms, validators

31181.3k16](/packages/openbuildings-jam)[tommyknocker/pdo-database-class

Framework-agnostic PHP database library with unified API for MySQL, MariaDB, PostgreSQL, SQLite, MSSQL, and Oracle. Query Builder, caching, sharding, window functions, CTEs, JSON, migrations, ActiveRecord, CLI tools, AI-powered analysis. Zero external dependencies.

816.0k](/packages/tommyknocker-pdo-database-class)[weebly/laravel-mutate

Mutate Laravel attributes

1356.0k](/packages/weebly-laravel-mutate)[jrsaunders/shard-matrix

A Complete Database Sharding system for MYSQL and/or Postgres. Using Laravels Query Builder easily scale up your application. Configure your whole solution in one Yaml Config file.

271.5k](/packages/jrsaunders-shard-matrix)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
