Если вам просто нужен уникальный идентификатор:
$uid = dechex( microtime(true) * 1000 ) . bin2hex( random_bytes(8) );
Если идентификаторы генерируются с интервалом более 1 миллисекунды, они на 100% уникальны.
Если два идентификатора генерируются с более короткими интервалами, это приведет к созданию идентификаторов, которые с вероятностью 99,999999999999999999% будут глобально уникальными (коллизия в 1 из 10 ^ 18)
Вы можете увеличить это число, добавив больше цифр, но для генерации 100% уникального идентификатора вам понадобится глобальный счетчик.
если вам действительно нужно соответствие RFC, это будет проходить как действительный GUID версии 4:
$guid = vsprintf('%s%s-%s-4000-8%.3s-%s%s%s0',str_split(dechex( microtime(true) * 1000 ) . bin2hex( random_bytes(8) ),4));
Это следует намерению, но не букве RFC. Среди прочих неточностей это всего лишь несколько случайных цифр. (Добавьте больше случайных цифр, если вам это нужно) Плюс в том, что это быстро по сравнению со 100% совместимым кодом. Вы можете проверить свой GUID здесь
person
Simon Rigét
schedule
13.06.2019