Uniqid: примеры (PHP)
uniqid(string prefix [, bool more_entropy]): stringФункция 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
- random_bytes() и bin2hex() — генерация криптографически безопасных случайных строк. Предпочтительнее для создания токенов безопасности.
- mt_rand() — генерация случайного числа. Не гарантирует уникальность, но может использоваться в комбинации с другими данными.
- com_create_guid() — генерация глобально уникального идентификатора (GUID) на Windows-системах.
- session_create_id() — создание уникального идентификатора для сессий.
Выбор функции зависит от задачи: для временных имён файлов подходит uniqid, для паролей и токенов — random_bytes.
import uuid
print(uuid.uuid4())a1b2c3d4-e5f6-7890-1234-567890abcdef
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 7.1 поведение функции uniqid() было изменено: теперь она использует системное время, а не случайное число, что сделало её более предсказуемой и немного быстрее. В PHP 8 существенных изменений в работе функции не было.
$uploadDir = 'uploads/';
$filename = $uploadDir . uniqid('img_') . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
echo $filename;uploads/img_6676e7a4c5a4b.jpg
$token = uniqid('', true);
$token = str_replace('.', '', $token); // Удаляем точку
$token = substr($token, -16); // Берем последние 16 символов
echo $token;6676e7a4c5a4b123
$uniqueHash = md5(uniqid('', true) . mt_rand());
echo $uniqueHash;a1b2c3d4e5f678901234567890abcdef0
$prefix = 'ORD' . date('Ymd');
$orderId = $prefix . '_' . uniqid();
echo $orderId;ORD20240618_6676e7a4c5a4c
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