Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сгенерировать UUID

Короткий ответ

UUID версии 4 — это 16 случайных байт с двумя служебными отметками:

<?php
 
function uuid(): string
{
    $bytes = random_bytes(16);
    $bytes[6] = chr(ord($bytes[6]) & 0x0f | 0x40);
    $bytes[8] = chr(ord($bytes[8]) & 0x3f | 0x80);
 
    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($bytes), 4));
}
 
echo uuid();

Проверка формата

Строку проверяют регулярным выражением:

<?php
 
$pattern = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
 
var_dump(preg_match($pattern, '3f2b8c1e-9d4a-4c6b-8e21-5a7d9f0b1c2d') === 1);
var_dump(preg_match($pattern, 'not-a-uuid') === 1);

Результат:

bool(true)
bool(false)

Готовая библиотека

В проектах с Composer используют пакет ramsey/uuid или symfony/uid: они умеют и другие версии, включая упорядоченные по времени UUID версии 7.

Функции из этого ответа

  • random_bytes — Возвращает случайные байты, пригодные для защиты.
  • bin2hex — Преобразует байты строки в шестнадцатеричную запись.
  • vsprintf — Форматирует строку по шаблону, принимая значения массивом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.