🪄راهنمای ایجاد رشته کاراکتری رندوم در PHP

در بعضی پروژه های PHP ممکن است نیاز داشته باشیم برای اسم فایل ها، مقادیر سشن ها، نام موقت یوزرها و یا سایر موارد از یک استرینگ و عبارت رندوم و یونیک استفاده کنیم.این مفهوم بیشتر در زمان ایجاد و یا آپلود فایل ها بر روی هاست و یا کار با فایل ها می تواند مورد استفاده قرار بگیرد. مخصوصا زمانی که نیاز است که عبارت های یونیک و منحصر به فرد ایجاد شود .
در این پست از پارس وب سرور، به بررسی و مرور توایعی که برای ایجاد رشته های رندوم و تصادفی می توان استفاده کرد می پردازیم.
ایجاد رشته های تصادفی و یونیک در php
در زبان PHP برای تولید رشتههای متنی تصادفی Random Strings میتوان از چندین روش استفاده کرد. رایجترین روشها شامل استفاده از توابع ()rand یا ()mt_rand همراه با آرایهای از کاراکترها، استفاده از تابع bin2hex(random_bytes()) برای تولید رشتههای امن و همچنین توابع ()str_shuffle و ()uniqid برای ایجاد رشتههای منحصربهفرد هستند.
در زمان دانلود برخی فایل ها و تصاویر و یا جنریت لینک های دانلود شاید این رشته های متنی و عددی را دیده باشید که ممکن است توسط یکی از روش های زیر ایجاد شده باشند .
در ادامه این روش ها را مرور می کنیم و استفاده هر روش را بررسی می کنیم.
1. استفاده از تابع ()rand یا ()mt_rand
تابع ()rand و نسخه بهینه تر آن یعنی ()mt_rand برای تولید اعداد تصادفی در PHP استفاده میشوند.
برای تولید یک رشته تصادفی، میتوان یک آرایه شامل حروف و اعداد تعیین کرد و سپس در یک loop از کاراکترهای تصادفی از آرایه اضافه کرد.
این روش ساده و سریع است اما از لحاظ امنیتی برای کاربردهای حساس مانند تولید توکنها مناسب نیست. مزیت این روش این هست که می توان کاراکترهای خاصی را برای تولید رشته مورد نظر مشخص و تعیین کرد.
function randomStringWithRand($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
return $randomString;
}
echo randomStringWithRand(12); // a5Tg9XsJkL1q
2. استفاده از تابع ()str_shuffle
تابع ()str_shuffle یک رشته ورودی را به صورت تصادفی مرتب میکند. این روش سریع است اما به دلیل استفاده از تابع ()rand برای تولید ترتیب تصادفی، برای تولید رشتههای تصادفی امن پیشنهاد نمیشود.
function randomStringWithShuffle($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
return substr(str_shuffle($characters), 0, $length);
}
echo randomStringWithShuffle(8); // 4bKx8QdW
3. استفاده از تابع ()uniqid
تابع ()uniqid یک شناسه منحصر به فرد و یونیک بر اساس مقدار زمان جاری تولید میکند. این روش برای تولید مقادیر یونیک مناسب است اما به دلیل وابستگی به زمان، برای کاربردهای تصادفی امن مناسب نیست.
function randomStringWithUniqid($prefix = '') {
return uniqid($prefix, true);
}
echo randomStringWithUniqid('usr_'); // usr_5f2a8c3f0.34208700
4. استفاده از تابع ()bin2hex و ()random_bytes
این ترکیب یکی از امنترین روشها برای تولید رشتههای تصادفی است. تابع ()random_bytes به صورت رمزنگاری شده بایتهای تصادفی تولید کرده و ()bin2hex آنها را به یک رشته هگزادسیمال تبدیل میکند. این روش برای تولید توکنها و کلیدهای امن مناسب است.
function randomStringWithRandomBytes($length = 16) {
return bin2hex(random_bytes($length));
}
echo randomStringWithRandomBytes(8); // d9e5f4a3b6c8d9a0
5. استفاده از تابع ()openssl_random_pseudo_bytes
تابع ()openssl_random_pseudo_bytes بایتهای تصادفی با کیفیت رمزنگاری تولید میکند. این روش نیز به اندازه روش قبل امن است و میتوان خروجی آن را به هگزادسیمال تبدیل کرد.
function randomStringWithOpenSSL($length = 16) {
return bin2hex(openssl_random_pseudo_bytes($length));
}
echo randomStringWithOpenSSL(8); // 7b3f9c1f3a8b5c1e
6. استفاده از تابع ()md5 یا ()sha1
ترکیب توابع ()md5 یا ()sha1 با مقادیری مانند ()uniqid نیز میتواند رشتههای تصادفی تولید کند. این روشها برای تولید هشهای یکتا مناسب هستند اما امنیت کمتری نسبت به روشهای رمزنگاری دارند.
function randomStringWithMd5() {
return md5(uniqid(mt_rand(), true));
}
echo randomStringWithMd5(); // c4ca4238a0b923820dcc509a6f75849b
7. استفاده از تابع ()base64_encode
میتوان از تابع ()base64_encode برای رمزگذاری دادههای تصادفی استفاده کرد. این روش به ویژه برای تولید توکنهای پایهی URL امن مناسب است.
function randomStringWithBase64($length = 16) {
return base64_encode(random_bytes($length));
}
echo randomStringWithBase64(12); // A3+5gJhLb2c4Vx==
8. استفاده از کتابخانههای خارجی (مانند ramsey/uuid)
برخی از کتابخانههای PHP مانند ramsey/uuid امکان تولید شناسههای یکتا (UUID) را فراهم میکنند که برای کاربردهای خاص مانند سیستمهای توزیع شده مناسب هستند.
require 'vendor/autoload.php';
use Ramsey\Uuid\Uuid;
function randomUUID() {
return Uuid::uuid4()->toString();
}
echo randomUUID(); // d4e8a7e3-9e8b-4c60-9f4d-a5e2f3c1b23f
روشهایی که به انها اشاره شد هرکدام کاربردهای متفاوتی دارند. برای تولید رشتههای امن مانند توکنها از ()random_bytes یا ()openssl_random_pseudo_bytes استفاده کنید. برای رشتههای ساده و غیرحساس میتوانید از روشهای مانند rand()، ()str_shuffle یا ()uniqid استفاده کنید. در مواردی که نیاز به UUID دارید، استفاده از کتابخانههای خارجی مانند ramsey/uuid توصیه میشود.
در این پست پارس وب سرور روش های تولید استرینگ های تصادفی را مرور کردیم .
از اینکه با این پست همراه ما بودید سپاسگزاریم.