Есть ли способ сгенерировать случайное число на основе минимума и максимума?
Например, если 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 ().
(rand() % ($max-$min)) + $min
или же
rand ( $min , $max )
Я собрал здесь ответы и сделал их независимыми от версии;
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)
Документация по функции PHP rand находится здесь:
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;
}