-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Uuid v4
github-actions[bot] edited this page Jul 15, 2026
·
1 revision
122 криптографически случайных бита — идентификатор «по умолчанию», когда не нужна сортируемость: непредсказуемый, без утечки времени и адреса узла.
Фабрика берёт 16 байт у источника случайности и одной строковой операцией проставляет биты версии и варианта — без посимвольных преобразований:
use CloudCastle\Uuid\Uuid;
use CloudCastle\Uuid\UuidFactory;
Uuid::uuid4(); // шорткат через процессную фабрику
(new UuidFactory())->uuid4(); // или своя фабрика
$uuid = Uuid::uuid4();
$uuid->toString(); // 'e2b0dd0e-…-…' (канон, нижний регистр)
$uuid->toBytes(); // 16 байт для BINARY(16)
$uuid->version(); // 4Источник случайности подменяем — в тестах генерация детерминирована:
use CloudCastle\Uuid\Contract\RandomSourceInterface;
$factory = new UuidFactory(random: $мойИсточник); // RandomSourceInterface- Непредсказуемость: подходит для публичных идентификаторов и токенов сущностей.
- Не раскрывает ни момент создания, ни машину.
- Самый быстрый в генерации (см. сравнение).
- Несортируем: как первичный ключ B-Tree вызывает случайные вставки по всему индексу (для ключей БД берите UUID v7 или ULID).
- Публичные идентификаторы API, где нежелательна утечка порядка создания.
- Идемпотентность запросов, ключи корреляции, трассировка.
- Кластеризованный первичный ключ большой таблицы — деградация вставок.
- «Укорачивание» v4 обрезкой строки — берите NanoID нужной длины.
flowchart LR
R[RandomSourceInterface] -->|"bytes(16)"| F[UuidFactory]
F -->|"маска версии/варианта<br/>одной операцией"| B[(16 байт)]
B --> U[Uuid v4]
sequenceDiagram
participant A as Приложение
participant F as UuidFactory
participant R as RandomSource
A->>F: uuid4()
F->>R: bytes(16)
R-->>F: случайные байты
F->>F: (bytes & AND) | OR — версия 4 + вариант RFC
F-->>A: Uuid
| Возможность | Uuid | ramsey/uuid | symfony/uid | 🏆 Победитель |
|---|---|---|---|---|
| Генерация v4 | ✅ | ✅ | ✅ | Паритет |
| Подменяемый источник случайности | ✅ | ✅ | ❌ | Uuid + ramsey/uuid |
| Скорость генерации до строки | 🥇 | 🥉 | 🥈 | Uuid |
CloudCastle Uuid · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)