Just to note this function is fairly slow, and can bring your script to a crawl if it is in a loop. Strangely if you run it as uniqid('', true) it runs much more quickly
(PHP 4, PHP 5, PHP 7, PHP 8)
uniqid — Генерирует идентификатор на основе времени
Функция получает идентификатор на основе текущего времени с точностью до микросекунды.
Функция добавляет в начало идентификатора префикс prefix
,
а в конец, если требуется, — случайное значение.
Функция не создаёт безопасные для криптографических целей значения, её нельзя использовать в криптографических целях или целях, которые требуют, чтобы значения возврата нельзя было угадать.
Безопасные для криптографических целей случайные последовательности создаёт композиция класса Random\Randomizer с движком Random\Engine\Secure. В простых сценариях пользуются функциями random_int() и random_bytes() с удобным и безопасным API-интерфейсом, который поддерживается безопасным для криптографических целей CSPRNG-генератором псевдослучайных чисел операционной системы.
Функция не гарантирует уникальность значения, поскольку основывает значение
на текущем времени в микросекундах или на текущем времени с добавлением
небольшого количества случайных данных, которые функция добавляет в конец
идентификатора, когда для параметра more_entropy
установили значение true
.
prefix
Параметр полезен, когда функция генерирует идентификаторы на серии хостов, и появляется риск генерации одинаковых идентификаторов в одну и ту же микросекунду. Иногда одинаковые идентификаторы генерируются даже на одном хосте, если системные часы, например, отстают после настройки времени через NTP-сервер.
С пустым параметром prefix
функция вернёт строку
длиной 13 символов. Длина строки будет составлять 23 символа,
если параметр more_entropy
равен true
.
more_entropy
Функция uniqid() добавит через комбинированный линейный
конгруэнтный генератор дополнительную энтропию в конец значения возврата,
что увеличивает вероятность уникальности результата, если значение параметра равно true
.
Функция возвращает в виде строки уникальный идентификатор на основе метки времени.
Функция не гарантирует уникальность значения, которое она возвращает.
Пример #1 Пример использования функции uniqid()
<?php
/* Уникальный ID, например: 4b3403665fea6 */
printf("uniqid(): %s\r\n", uniqid());
/* Префикс к уникальному ID добавляют следующими
* способами:
*
* $uniqid = $prefix . uniqid();
* $uniqid = uniqid($prefix);
*/
printf("uniqid('php_'): %s\r\n", uniqid('php_'));
/* Можно также активировать параметр more_entropy, который требуется в ряде систем наподобие Cygwin,
* чтобы увеличить энтропию. Тогда
* функция uniqid() создаст значение наподобие: 4b340550242239.64159797
*/
printf("uniqid('', true): %s\r\n", uniqid('', true));
?>
Замечание:
В среде Cygwin параметру
more_entropy
для работы этой функции требуется установить значениеtrue
.
Just to note this function is fairly slow, and can bring your script to a crawl if it is in a loop. Strangely if you run it as uniqid('', true) it runs much more quickly