Это может быть не по теме, но я надеюсь, что кто-то может ответить на этот вопрос.
За сколько наносекунд, миллисекунд или секунд uniqid () с большей энтропией рискует создать дубликат?
Со ссылкой на ссылку ниже, uniqid будет конфликтовать, если два идентификатора будут созданы за одну миллисекунду. А как насчет энтропии?
(Моя цель — использовать небольшую индексируемую буквенно-цифровую строку в качестве идентификатора документа при создании, которая может быть создана быстро с минимальной мощностью процессора без вмешательства дБ.)
Ответы здесь не дают точного числа:
Насколько уникален уникальный?
От исходный код, more_entropy
добавляет девять случайных десятичных цифр, так что вы можете ожидать столкновения после примерно 37 000 вызовов. (Как миллиард превратился в 37 000, см. нападение на день рождения.) Это, конечно, игнорирует тот факт, что эти цифры на самом деле не случайны, а генерируются LCG, и тот же LCG, вероятно, используется в других местах в коде, поэтому реальная вероятность столкновения, вероятно, выше (насколько точно, я понятия не имею).
Также стоит отметить, что uniqid
фактически не гарантирует микросекундное разрешение, так как некоторые реализации PHP (в частности, Windows) не имеют доступа к часам с точностью до микросекунды.
Короче говоря, если вам нужен уникальный идентификатор для чего-либо чувствительного к безопасности, или коллизии дорогостоящие, избегайте uniqid
, В противном случае, используя его с more_entropy
это, вероятно, хорошо (хотя общая схема заключается в использовании uniqid(mt_rand(), true)
добавить еще больше энтропии).
Других решений пока нет …