-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Uuid time based
Классические временные UUID: 60-битная метка Григория (100-нс тики с 1582-10-15), 14-битная тактовая последовательность и 48-битный узел. v6 — та же информация в сортируемой раскладке (старшие биты времени впереди).
use CloudCastle\Uuid\UuidFactory;
$factory = new UuidFactory(node: '9f6bdeced846', clockSequence: 0x33C8);
$v1 = $factory->uuid1();
$v6 = $factory->uuid6();
$v1->dateTime(); // момент с точностью до микросекунды
$v1->node(); // '9f6bdeced846'
$v1->clockSequence(); // 13256Узел принимается как 12 hex-символов или 6 сырых байт; без явного узла генерируется случайный с multicast-битом (RFC 9562 §6.10) — случайный узел не выдаёт себя за реальный MAC-адрес.
Монотонность при замороженных часах обеспечивает субтиковый счётчик: каждый вызов в ту же микросекунду продвигает метку на один 100-нс тик. Состояние v1 и v6 общее — их метки не пересекаются.
- Точность 100 нс — самая высокая среди всех версий.
- Полная интроспекция: время, узел, последовательность.
- Диапазон от 1582 года — пригоден для исторических данных.
- v1 несортируем байтово (время задом наперёд) — для индексов берите v6 или v7.
- Узел и время раскрываются читателю идентификатора.
- Совместимость с legacy-системами, ожидающими v1.
- v6 — когда нужна сортируемость и микросекундная точность одновременно.
- Реальный MAC-адрес в качестве узла без необходимости — утечка топологии сети.
flowchart LR
C[Часы] -->|"тики Григория ×10⁷/с"| F[UuidFactory]
N["Узел (hex12/байты/случайный+multicast)"] --> F
S["Тактовая последовательность 14 бит"] --> F
F --> V1["v1: low-mid-high"]
F --> V6["v6: high-mid-low (сортируемый)"]
sequenceDiagram
participant A as Приложение
participant F as UuidFactory
A->>F: uuid1()
F->>F: тики = мкс × 10 + смещение Григория
F->>F: тики ≤ прошлых? → прошлые + 1 (субтик)
F->>F: + узел + последовательность
F-->>A: Uuid v1 (точность 100 нс)
| Возможность | Uuid | ramsey/uuid | symfony/uid | 🏆 Победитель |
|---|---|---|---|---|
| UUID v1 | ✅ | ✅ | ✅ | Паритет |
| UUID v6 | ✅ | ✅ | ✅ | Паритет |
| Явный узел и последовательность | ✅ | ✅ | Uuid + ramsey/uuid | |
| Multicast-бит случайного узла | ✅ | ✅ | ✅ | Паритет |
| PSR-20 часы | ✅ | ❌ | Uuid | |
| Даты от 1582 года | ✅ | ✅ | ✅ | Паритет |
CloudCastle Uuid · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)