Для PHP 7+ использования random_int(), random_bytes()или openssl_random_pseudo_bytes() . как сказал @Salvador Dali rand(), не генерируют криптографически безопасные результаты. См. Документацию php.net/manual/en/function.rand.php
я думал, что min и max для rand - это количество цифр, которые нужно использовать вместо чисел :) thnx
Val
Связано: если PHP_INT_MAX < ($max-$min)вам нужно сложить интервалы, как описано в этом ответе .
епископ
rand () до PHP7.1 - это просто плохо. Он использует алгоритм LCG, который дает предсказуемые результаты. Это тоже медленно. Поскольку PHP7.1 rand () является псевдонимом mt_rand (), это уже неплохо. PHP7 также представил криптографически безопасный random_int (), однако его следует избегать, за исключением случаев крайней необходимости, поскольку он намного медленнее, чем mt_rand ()
Замечательно! Но пока веб-хосты не будут поддерживать PHP7 более глобально, это, к сожалению, бесполезно для тех, кто создает продукты для распространения. Таким образом, предыдущие ответы, которые ТАКЖЕ работают на PHP7, по-прежнему являются лучшей практикой.
Мэтт Кромвель
1
@MattCromwell. Я не согласен с вами. Пока услуги хостинга не поддерживает PHP7 мы должны использовать polyfill для random_intи random_bytesфункции - github.com/paragonie/random_compat .
Владимир Посвистелик
Мне любопытно, есть ли причина НЕ использовать random_int ? Если он дает «лучшие» случайные числа, почему бы не использовать его по причинам, не связанным с криптовалютой?
Брайан Лейшман
1
@BrianLeishman Я бы предпочел использовать его для всего. Единственный недостаток, о котором я могу догадаться: он, вероятно, полагается на источник случайности и может потерпеть неудачу, если у вас нет случайности. Это может быть дороже (нужно проверить), но я сомневаюсь, что эта функция имеет большое значение
Сальвадор Дали
Я знаю, что он медленнее, но он достаточно незначителен, чтобы не возвращаться и не менять уже существующие random_ints на rands. Кроме того, мой вариант использования - это алгоритм повтора, и я определенно не хочу, чтобы несколько неудачных функций слипались после сна из-за предсказуемых случайных целых чисел,
Брайан Лейшман
19
Быстрее быстрее версия будет использовать mt_rand:
ПРИМЕЧАНИЕ. Для этого на вашем сервере должен быть включен модуль Math PHP. Если это не так, поставьте ошибку на вашем хосте, чтобы включить его, или вам придется использовать обычный (и более медленный) rand ().
random_int()
,random_bytes()
илиopenssl_random_pseudo_bytes()
. как сказал @Salvador Dalirand()
, не генерируют криптографически безопасные результаты. См. Документацию 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_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 )
http://php.net/manual/en/function.rand.php
источник
Я собрал здесь ответы и сделал их независимыми от версии;
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; }
источник