uniqid

(PHP 4, PHP 5, PHP 7, PHP 8)

uniqidГенерирует идентификатор на основе времени

Описание

uniqid(string $prefix = "", bool $more_entropy = false): string

Функция получает идентификатор на основе текущего времени с точностью до микросекунды. Функция добавляет в начало идентификатора префикс 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.

Смотрите также

  • random_bytes() - Получает криптографически безопасные случайные байты
add a note

User Contributed Notes 1 note

up
2
ken at smallboxsoftware
17 years ago
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
To Top