Uniqid: примеры (PHP)

Полное руководство по PHP функции uniqid: от основ до продвинутых примеров
Раздел: Строки/идентификаторы
uniqid(string prefix [, bool more_entropy]): string
Основы функции uniqid

Функция uniqid() в PHP генерирует уникальный идентификатор на основе текущего времени в микросекундах. Её основное применение — создание временных уникальных имён для файлов, сессионных токенов или ключей кеша.

Функция принимает два необязательных аргумента:

  • prefix (строка) — префикс, который добавляется в начало идентификатора. По умолчанию — пустая строка.
  • more_entropy (логический) — если установлен в true, к концу идентификатора добавляется дополнительная энтропия (случайность) через точку, что увеличивает уникальность. По умолчанию — false.

Идентификатор представляет собой строку в шестнадцатеричном формате длиной 13 символов (или до 23 с энтропией).

Простые примеры использования
Базовый вызов
echo uniqid();
6676e7a4c5a1b
С префиксом
echo uniqid('file_');
file_6676e7a4c5a2e
С добавлением энтропии
echo uniqid('', true);
6676e7a4c5a35.12345678
С префиксом и энтропией
echo uniqid('sess_', true);
sess_6676e7a4c5a3f.12345678
Похожие функции в PHP
  • random_bytes() и bin2hex() — генерация криптографически безопасных случайных строк. Предпочтительнее для создания токенов безопасности.
  • mt_rand() — генерация случайного числа. Не гарантирует уникальность, но может использоваться в комбинации с другими данными.
  • com_create_guid() — генерация глобально уникального идентификатора (GUID) на Windows-системах.
  • session_create_id() — создание уникального идентификатора для сессий.

Выбор функции зависит от задачи: для временных имён файлов подходит uniqid, для паролей и токенов — random_bytes.

Аналоги в других языках
Python (модуль uuid)
import uuid
print(uuid.uuid4())
a1b2c3d4-e5f6-7890-1234-567890abcdef
JavaScript (в браузере)
console.log(crypto.randomUUID()); // или performance.now()
'1a2b3c4d-5e6f-7890-abcd-ef1234567890'

Uniqid в MySQL

SELECT UUID();
a1b2c3d4-e5f6-7890-1234-567890abcdef

Основное отличие от PHP функции — в формате и гарантиях уникальности. uniqid основан на времени, а аналоги в других языках часто используют стандарт UUID и могут быть криптографически безопасными.

Типичные ошибки
Использование как уникального ключа в БД

Идентификатор не является криптографически безопасным или гарантированно уникальным в распределённых системах.

$id = uniqid();
// Вставка в базу данных как первичный ключ

Риск: Возможны коллизии при высокой скорости генерации.

Неправильное предположение о длине
$id = uniqid();
echo strlen($id); // Выведет 13
$id2 = uniqid('', true);
echo strlen($id2); // Выведет 23 (с точкой)

Если ожидается строка фиксированной длины, это может вызвать проблемы.

Использование для сортировки по времени
$id1 = uniqid();
usleep(10);
$id2 = uniqid();
var_dump($id1 < $id2); // Может быть false из-за шестнадцатеричного формата

Шестнадцатеричные строки нельзя напрямую сравнивать для определения хронологического порядка.

Изменения в последних версиях PHP

В PHP 7.1 поведение функции uniqid() было изменено: теперь она использует системное время, а не случайное число, что сделало её более предсказуемой и немного быстрее. В PHP 8 существенных изменений в работе функции не было.

Расширенные примеры
Генерация уникального имени файла
Пример php
$uploadDir = 'uploads/';
$filename = $uploadDir . uniqid('img_') . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
echo $filename;
uploads/img_6676e7a4c5a4b.jpg
Создание токена с дополнительной энтропией
Пример php
$token = uniqid('', true);
$token = str_replace('.', '', $token); // Удаляем точку
$token = substr($token, -16); // Берем последние 16 символов
echo $token;
6676e7a4c5a4b123
Комбинация с хешированием для увеличения уникальности
Пример php
$uniqueHash = md5(uniqid('', true) . mt_rand());
echo $uniqueHash;
a1b2c3d4e5f678901234567890abcdef0
Генерация серийного номера с префиксом и временем
Пример php
$prefix = 'ORD' . date('Ymd');
$orderId = $prefix . '_' . uniqid();
echo $orderId;
ORD20240618_6676e7a4c5a4c
Имитация UUID формата
Пример php
function customUuid() {
    $data = uniqid('', true);
    $hash = md5($data);
    return sprintf('%s-%s-%s-%s-%s',
        substr($hash, 0, 8),
        substr($hash, 8, 4),
        substr($hash, 12, 4),
        substr($hash, 16, 4),
        substr($hash, 20, 12)
    );
}
echo customUuid();
a1b2c3d4-e5f6-7890-1234-567890abcdef

PHP uniqid function comments

En
Uniqid Generate a unique ID