ایجاد رشته تصادفی در زبان PHP
در بسیاری از پروژههای برنامهنویسی، نیاز به تولید رشتههای تصادفی یا رندوم وجود دارد. به عنوان مثال، ممکن است برای ایجاد رمزهای عبور، توکنهای امنیتی، یا شناسههای یکتا و یونیک در برنامه نیاز به رشتههای تصادفی و رندوم داشته باشیم. در زبان برنامه نویسی پی اچ پی روشهای مختلفی برای تولید این رشتهها وجود دارد. در این نوشته چندین روش رایج و کارآمد برای تولید رشته تصادفی را بررسی میکنیم.
ایجاد رشته تصادفی در زبان PHP
روش اول: استفاده از rand و str_shuffle
یکی از سادهترین روشها برای تولید رشتههای تصادفی و رندوم استفاده از توابع rand و str_shuffle در زبان برنامه نویسی پی اچ پی است. تابع str_shuffle ترتیب کاراکترهای یک رشته را به صورت تصادفی و رندوم تغییر میدهد.
مثال:
<?php
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
echo generateRandomString();
?>
در این کد:
$characters مجموعهای از کاراکترهایی میباشد که میخواهیم در رشتهی تصادفی و رندوم استفاده شوند. این مجموعه شامل اعداد 0 تا 9، حروف کوچک و بزرگ انگلیسی است.
تابع generateRandomString با طول پیشفرض ۱۰ کاراکتر، یک رشتهی تصادفی تولید میکند. اگر میخواهید طول رشته متفاوتی داشته باشید، میتوانید پارامتر $length را تغییر دهید.
خروجی نمونه:
aBc3dE2GhK
روش دوم: استفاده از تابع bin2hex و random_bytes
روش دیگری که هم ایمنتر و هم سادهتر میباشد، استفاده از تابعهای random_bytes و bin2hex میباشد. این تابعها برای تولید دادههای تصادفی با امنیت بالا کاربرد دارند، خصوصاً برای کاربردهای امنیتی مانند تولید توکنها.
مثال:
<?php
function generateSecureRandomString($length = 10) {
return substr(bin2hex(random_bytes($length)), 0, $length);
}
echo generateSecureRandomString();
?>
در این کد:
- تابع random_bytes بایتهای تصادفی را تولید میکند.
- تابع bin2hex این بایتها را به یک رشتهی هگزا دسیمال HEX (رشتهای متشکل از اعداد 0 تا 9 و حروف a تا f انگلیسی) تبدیل میکند.
- از تابع substr برای اطمینان از این که طول رشته تولید شده دقیقاً به اندازه پارامتر $length باشد استفاده میشود.
- این روش برای مواقعی که نیاز به تولید رشتههای تصادفی با امنیت بالا دارید، مانند رمز عبور یا توکنهای یکتا، مناسب است.
روش سوم: استفاده از تابع openssl_random_pseudo_bytes
تابع دیگری که میتوانید برای تولید دادههای تصادفی و رندوم استفاده کنید، openssl_random_pseudo_bytes است. این تابع نیز از الگوریتمهای رمزنگاری برای تولید دادههای تصادفی و رندوم استفاده میکند.
مثال:
<?php
function generateOpenSSLRandomString($length = 10) {
return substr(bin2hex(openssl_random_pseudo_bytes($length)), 0, $length);
}
echo generateOpenSSLRandomString();
?>
این روش نیز مشابه روش دوم است، با این تفاوت که از کتابخانهی OpenSSL برای تولید دادههای تصادفی و رندوم استفاده میکند.



















bin2hex محدودیتی روی طول رشته نداره؟
خیر، محدودیت خاصی از طرف bin2hex وجود نداره. تنها محدودیت، مقدار حافظه و طول بایتی هست که به random_bytes میدید. هرچقدر بایت بیشتری تولید کنید، bin2hex هم رشته طولانیتری میسازه.
اگر طول رشته خیلی کوتاه باشه، باز هم خروجی واقعا تصادفی هست؟
بله، حتی برای طولهای کوتاه هم دادهها بهصورت تصادفی تولید میشن. فقط به خاطر کوتاه بودن رشته، تعداد حالتهای ممکن کمتره، اما همچنان تصادفی و غیرقابل پیشبینی هست.
میشه با همین کد، فقط حروف بزرگ انگلیسی تولید کرد؟
بله، کافیه مجموعهی کاراکترها رو تغییر بدید. مثلا فقط از “ABCDEFGHIJKLMNOPQRSTUVWXYZ” استفاده کنید تا خروجی فقط شامل حروف بزرگ باشه.
استفاده از random_bytes امن هست؟
بله، random_bytes یک تابع رمزنگاریشده (cryptographically secure) هست و برای تولید توکنها و رمزهای عبور ایمن پیشنهاد میشه. این روش از نظر امنیتی معتبرتر از rand یا str_shuffle هست.
این روش str_shuffle برای رشتههای خیلی طولانی هم سریع عمل میکنه؟
str_shuffle برای رشتههای معمولی سرعت خوبی داره، اما وقتی رشته خیلی بزرگ باشه (مثلا چند هزار کاراکتر)، سرعت کاهش پیدا میکنه و مصرف حافظه هم بیشتر میشه. برای رشتههای خیلی طولانی بهتره از روشهای مبتنی بر random_bytes استفاده کنید.