Як згенерувати випадковий унікальний рядок у PHP

  • Останнє оновлення: 3 Квітня 2024 р.
  • Перегляди: 18
  • Автор: Адмін
Як згенерувати випадковий унікальний рядок у PHP

Колеги всім привіт.

У сьогоднішній статті ми поговоримо про те, як згенерувати унікальний рядок у PHP.

Майже завжди ви у своїх розробках зіштовхуватиметеся з тим що вам потрібно згенерувати унікальний рядок певної довжини, і прикладом тому дуже багато. Один із прикладів, за яким вам потрібно буде згенерувати унікальний рядок, це куки для користувачів, які реєструються у вас на сайті, і при кожній авторизації ця кука буде використовуватися користувачем.

У PHP існує дуже багато варіантів як згенерувати унікальний рядок, і я вам покажу найчастіше використовувані варіанти, які використовують розробники.

 

У першому варіанті ми будемо використовувати функцію uniqid. Функція uniqid генерує унікальний рядок на основі отримання поточного часу в мікросекундах. У цій функції є два необов'язкові параметри, які можна передати, але щоб нам згенерувати унікальний рядок, то додатково ми можемо нічого не передавати.

php> uniqid();

string generate

Ми викликали функцію uniqid двічі і отримали в результаті два унікальні рядки.


 

У наступному варіанті, щоб згенерувати унікальний рядок, ми будемо використовувати дві функції, random_bytes та bin2hex.

php> bin2hex(random_bytes(20));

string generate

Спочатку функція random_bytes генерує криптографічно псевдовипадкові байти, функція приймає обов'язковий параметр length, тобто довжину рядка, що генерується в байтах. Після генерації рядка в байтах подальшою дією цей рядок потрібно передати в функцію bin2hex. Функція bin2hex призначена для того, щоб перетворити бінарні дані на шістнадцяткове уявлення, тобто у звичайний рядок.


 

Наступним варіантом для генерації унікального рядка ми будемо використовувати вже три функції,  substrmd5 і time.

php> substr(md5(time()), 0, 10);

string generate

Спочатку ми отримуємо набір цифр шляхом виклику функції time, яка повертає кількість секунд, що пройшли з початку епохи Unix. Наступною дією ми передаємо цей набір цифр у функцію md5, яка формує хеш рядки. Останнім етапом ми передаємо цей хеш рядки в функцію substr, яка обрізає рядок на ту довжину, яка нам потрібна шляхом передачі другого параметра length.


 

Наступні три варіанти дуже схожі з попереднім варіантом отримання рядка. Використовуватимуться всі ті функції, але лише в різній послідовності.

php> substr(sha1(time()), 0, 5);

php> md5(time());

php> sha1(time());

string generate


 

Останнім варіантом я вам надам дві свої функції, які можуть генерувати рядок тієї довжини, яку ми захочемо.

Перша функція.

function generateRandomString($length = 20) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

string generate

 

Друга функція.

function rand_str() {
    $characters = '0123456789ampabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomstr = '';
    for ($i = 0; $i < random_int(10, 30); $i++) {
        $randomstr .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomstr;
}

string generate


 

Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.

 

СХОЖІ СТАТТІ

Yii2 - як відключити CSRF валідацію токена
PHP - Як визначити часовий пояс - timezone