Как сгенерировать случайную уникальную строку в PHP
Коллеги всем привет.
В сегодняшней статье мы поговорим о том как сгенерировать уникальную строку в PHP.
Почти всегда вы в своих разработках будете сталкиваться с тем что вам нужно сгенерировать уникальную строку определенной длины, и примером тому очень много. Один из примеров по которому вам нужно будет сгенерировать уникальную строку, это куки для пользователей, которые регистрируются у вас на сайте, и при каждой авторизации эта кука будет использоваться пользователем.
В PHP существует очень много вариантов как сгенерировать уникальную строку, и я вам покажу самые часто используемые варианты которые используют разработчики.
В самом первом варианте мы будем использовать функцию uniqid. Функция uniqid генерирует уникальную строку на основе получения текущего времени в микросекундах. В этой функции есть два не обязательных параметра которые можно передать, но чтобы нам сгенерировать уникальную строку то дополнительно мы можем ничего не передавать.
php> uniqid();
Мы вызвали функцию uniqid два раза и получили в результате две уникальные строки.
В следующем варианте, чтобы сгенерировать уникальную строку, мы будем использовать две функции, random_bytes и bin2hex.
php> bin2hex(random_bytes(20));
Сначала функция random_bytes генерирует криптографически псевдослучайные байты, функция принимает обязательный параметр length, то есть длину генерируемой строки в байтах. После генерации строки в байтах дальнейшим действием эту строку нужно передать в функцию bin2hex. Функция bin2hex предназначена, для того чтобы преобразовать бинарные данные в шестнадцатеричное представление, то есть в обычную строку.
Следующим вариантом для генерации уникальной строки мы будем использовать уже три функции, substr, md5 и time.
php> substr(md5(time()), 0, 10);
Сначала мы получаем набор цифр путем вызова функции time которая возвращает количество секунд, прошедших с начала эпохи Unix. Следующим действием мы передаем этот набор цифр в функцию md5 которая формируем хеш строки. Последним этапом мы передаем этот хеш строки в функцию substr, которая обрезает строку на ту длину, которая нам нужна путем передачи второго параметра length.
Следующие три варианта очень похожи с предыдущем вариантом получения строки. Будут использоваться все те функции, но только в разной последовательности.
php> substr(sha1(time()), 0, 5);
php> md5(time());
php> sha1(time());
Последним вариантом я вам предоставлю две своих функции которые могут генерировать строку той длинны, которую мы захотим.
Первая функция.
function generateRandomString($length = 20) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
Вторая функция.
function rand_str() {
$characters = '0123456789ampabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomstr = '';
for ($i = 0; $i < random_int(10, 30); $i++) {
$randomstr .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomstr;
}
Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.