Ако просто се нуждаете от много уникален идентификатор:
$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