Skip to content

Feature Uuid named

github-actions[bot] edited this page Jul 15, 2026 · 1 revision

🏷️ UUID v3/v5 — по имени

← Возможности · Главная · Сравнение

Детерминированные UUID: одно и то же имя в одном пространстве имён всегда даёт один и тот же идентификатор. v5 (SHA-1) — основной; v3 (MD5) — для совместимости с существующими системами.

Принцип работы

use CloudCastle\Uuid\Uuid;
use CloudCastle\Uuid\UuidNamespace;

Uuid::uuid5(UuidNamespace::Dns, 'www.example.com');
// всегда '2ed6657d-e927-568b-95e1-2665a8aea6a2' (вектор RFC 9562)

Uuid::uuid3(UuidNamespace::Dns, 'www.example.com');
// всегда '5df41881-3aed-3515-88a7-2f4a814cf09e'

Пространство имён — enum UuidNamespace (Dns / Url / Oid / X500), готовый Uuid или каноническая строка:

$app = Uuid::uuid5(UuidNamespace::Url, 'https://my-app.example');   // корень приложения
$user = Uuid::uuid5($app, 'user:42');                               // иерархия имён

Для предопределённых пространств байты берутся из константной таблицы — без разбора канонической строки на каждый вызов.

Плюсы

  • Воспроизводимость: идентификатор восстанавливается из имени в любой системе.
  • Иерархии: результат v5 сам служит пространством имён следующего уровня.
  • Никакого состояния, времени и случайности.

Минусы

  • MD5/SHA-1 здесь — не криптографическая защита: имя перебираемо, если пространство известно.

✅ Рекомендуется

  • Стабильные идентификаторы сущностей из внешних ключей (URL, e-mail, коды).
  • Слияние данных из независимых источников без координации.

❌ Антипаттерны

  • Секретные значения в имени: v3/v5 — хеш, а не шифрование.

Схема фичи

flowchart LR
    NS["Пространство имён<br/>(enum / Uuid / строка)"] --> H["MD5 (v3) / SHA-1 (v5)"]
    NAME["Имя (строка)"] --> H
    H -->|"16 байт + версия/вариант"| U[Uuid v3/v5]
Loading

Жизненный цикл

sequenceDiagram
    participant A as Приложение
    participant F as UuidFactory

    A->>F: uuid5(Dns, 'www.example.com')
    F->>F: байты пространства (константа для enum)
    F->>F: sha1(байты . имя) → 16 байт
    F->>F: маска версии 5 + варианта RFC
    F-->>A: детерминированный Uuid
Loading

Сравнение с аналогами

Возможность Uuid ramsey/uuid symfony/uid 🏆 Победитель
UUID v3 / v5 Паритет
Enum предопределённых пространств ⚠️ Uuid
Пространство строкой / объектом ⚠️ Uuid + ramsey/uuid
Скорость v5 до строки 🥇 🥉 🥈 Uuid

Clone this wiki locally