Чи є спосіб генерувати випадкове число на основі мінімуму та максимуму?
Наприклад, якщо min дорівнював 1, а max 20, він повинен генерувати будь-яке число від 1 до 20, включаючи 1 і 20?
Чи є спосіб генерувати випадкове число на основі мінімуму та максимуму?
Наприклад, якщо min дорівнював 1, а max 20, він повинен генерувати будь-яке число від 1 до 20, включаючи 1 і 20?
random_int()
, random_bytes()
або openssl_random_pseudo_bytes()
. як сказав @Salvador Dali rand()
, не генеруйте криптографічно безпечних результатів. Див. Документацію php.net/manual/en/function.rand.php
Відповіді:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
вам потрібно скласти інтервали разом, як описано у цій відповіді .
У новому PHP7 нарешті є підтримка криптографічно захищених псевдовипадкових цілих чисел.
int random_int ( int $min , int $max )
random_int - генерує криптографічно захищені псевдовипадкові цілі числа
що в основному робить попередні відповіді застарілими.
random_int
і random_bytes
функціонувати - github.com/paragonie/random_compat .
random_int
? Якщо він дає "кращі" випадкові числа, чому б не використовувати його з некриптологічних причин?
random_int
s на rand
s. Крім того, моїм випадком використання є алгоритм повторної спроби, і я точно не хочу, щоб кілька невдалих функцій злипалися після сну через передбачувані випадкові вставки
Швидше швидше версія буде використовувати mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
Джерело: http://www.php.net/manual/en/function.mt-rand.php .
ПРИМІТКА. Для того, щоб це працювало, на вашому сервері повинен бути включений модуль Math PHP. Якщо цього не сталося, виправте помилку хосту, щоб увімкнути його, або вам доведеться використовувати звичайний (і повільніший) rand ().
Я зібрав тут відповіді та зробив його незалежним від версії;
function generateRandom($min = 1, $max = 20) {
if (function_exists('random_int')):
return random_int($min, $max); // more secure
elseif (function_exists('mt_rand')):
return mt_rand($min, $max); // faster
endif;
return rand($min, $max); // old
}
rand(1,20)
Документи щодо функції rand PHP тут:
http://php.net/manual/en/function.rand.php
Використовуйте srand()
функцію, щоб встановити початкове значення генератора випадкових чисел.
Спробуйте цей. Він створить ідентифікатор відповідно до вашого бажання.
function id()
{
// add limit
$id_length = 20;
// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {
// generate randomly within given character/digits
@$token .= $alfa[rand(1, strlen($alfa))];
}
return $token;
}