Як згенерувати випадковий унікальний рядок у 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;
}
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.