دو مشکل عمده در تابع شما وجود دارد.
-
$randstring
داخل محدوده نیست وقتی echo می کنید.
- پیوستگی های کارکتر شما در داخل
for
رعایت نمی شود.
قطعه کد زیر کد شماست با کمی اصلاح
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 the random string.
// Optionally, you can give it a desired string length.
echo generateRandomString();
حتما توجه داشته باشید که اگر از این رشته می خواهید در جای های حساس مانند پسورد و ... استفاده کنید این تابعی که شما نوشته اید رشته های تصادفی قابل پیش بینی خواهند شد زیرا از قواعد (CSPRNG ) پیروی نمی کند.
اگر امن بودن رشته برای شما اهمیت دارد از روش زیر استفاده کنید.
برای این کار از تابع random_int() استفاده باید بشود.
function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
$pieces = [];
$max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
$pieces []= $keyspace[random_int(0, $max)];
}
return implode('', $pieces);
}
نحوه استفاده:
$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');
نمونه انلاین