Php генерация целых чисел

rand

Если вызывается без необязательного min , max arguments rand () возвращает псевдослучайное целое число от 0 до getrandmax () . Например, если вам нужно случайное число от 5 до 15 (включительно), используйте rand(5, 15) .

Эта функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам нужно криптографически безопасное значение, рассмотрите возможность использования вместо них random_int () , random_bytes () или openssl_random_pseudo_bytes () .

Примечание . На некоторых платформах (например, Windows) getrandmax () имеет значение только 32767. Если вам требуется диапазон, превышающий 32767, указание min и max позволит вам создать диапазон, превышающий этот, или рассмотрите возможность использования вместо этого mt_rand () .

Примечание . Начиная с PHP 7.1.0, rand () использует тот же генератор случайных чисел, что и mt_rand () . Чтобы сохранить обратную совместимость, rand () позволяет max быть меньше min , а не возвращает false как mt_rand () .

Parameters

Наименьшее возвращаемое значение (по умолчанию:0)

Наибольшее возвращаемое значение (по умолчанию: getrandmax () )

Return Values

Псевдослучайное значение от min (или 0) до max (или getrandmax () включительно).

Changelog

Version Description
7.2.0 rand () получил исправление ошибки смещения по модулю. Это означает, что последовательности, созданные с помощью определенного начального числа, могут отличаться от PHP 7.1 на 64-битных машинах.
7.1.0 rand () был сделан псевдонимом mt_rand () .
Читайте также:  Приложение будильник для java

Examples

Пример # 1 Rand () Пример

 echo rand() . "\n"; echo rand() . "\n"; echo rand(5, 15); ?>

Из приведенного выше примера будет выведено нечто подобное:

Notes

See Also

  • srand () — запускает генератор случайных чисел
  • getrandmax () — Показать наибольшее возможное случайное значение
  • mt_rand () — генерирует случайное значение с помощью генератора случайных чисел Mersenne Twister
  • random_int () — генерирует криптографически безопасные псевдослучайные целые числа
  • random_bytes () — генерирует криптографически безопасные псевдослучайные байты
  • openssl_random_pseudo_bytes () — генерирует псевдослучайную строку байтов
PHP 8.2

(PECL radius 1.1.0)radius_server_secret Возвращает общий секрет Общий секрет необходим в качестве соли для разделения искаженных данных,таких как пароли и ключи шифрования.

(PECL radius 1.1.0)radius_strerror Возвращает сообщение Если Radius-функции не работают,то они записывают сообщение об ошибке.

(PHP 7,8)random_bytes Генерирует криптографически безопасный псевдослучайный Генерирует строку произвольной длины криптографически случайных байтов,которые подходят для

(PHP 7,8)random_int Генерирует криптографически безопасные псевдослучайные целые числа Генерирует криптографические случайные целые числа,которые подходят для использования в тех случаях,когда

Источник

random_int

Generates a uniformly selected integer between the given minimum and maximum.

The randomness generated by this function is suitable for all applications, including the generation of long-term secrets, such as encryption keys.

The sources of randomness in the order of priority are as follows:

  • Linux: » getrandom(), /dev/urandom
  • FreeBSD >= 12 (PHP >= 7.3): » getrandom(), /dev/urandom
  • Windows (PHP >= 7.2): » CNG-API Windows: » CryptGenRandom
  • macOS (PHP >= 8.2; >= 8.1.9; >= 8.0.22 if CCRandomGenerateBytes is available at compile time): CCRandomGenerateBytes() macOS (PHP >= 8.1; >= 8.0.2): arc4random_buf(), /dev/urandom
  • NetBSD >= 7 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
  • OpenBSD >= 5.5 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
  • DragonflyBSD (PHP >= 8.1): » getrandom(), /dev/urandom
  • Solaris (PHP >= 8.1): » getrandom(), /dev/urandom
  • Any combination of operating system and PHP version not previously mentioned: /dev/urandom
  • If none of the sources are available or they all fail to generate randomness, then a Random\RandomException will be thrown.

Note: Although this function was added to PHP in PHP 7.0, a » userland implementation is available for PHP 5.2 to 5.6, inclusive.

Parameters

The lowest value to be returned.

The highest value to be returned.

Return Values

A cryptographically secure, uniformly selected integer from the closed interval [ min , max ]. Both min and max are possible return values.

Errors/Exceptions

  • If an appropriate source of randomness cannot be found, a Random\RandomException will be thrown.
  • If max is less than min , an ValueError will be thrown.

Changelog

Version Description
8.2.0 In case of a CSPRNG failure, this function will now throw a Random\RandomException . Previously a plain Exception was thrown.

Examples

Example #1 random_int() example

The above example will output something similar to:

See Also

User Contributed Notes 3 notes

Here is a simple backporting function, it works for PHP >= 5.1

if (! function_exists ( ‘random_int’ )) function random_int ( $min , $max ) if (! function_exists ( ‘mcrypt_create_iv’ )) trigger_error (
‘mcrypt must be loaded for random_int to work’ ,
E_USER_WARNING
);
return null ;
>

if (! is_int ( $min ) || ! is_int ( $max )) trigger_error ( ‘$min and $max must be integer values’ , E_USER_NOTICE );
$min = (int) $min ;
$max = (int) $max ;
>

if ( $min > $max ) trigger_error ( ‘$max can\’t be lesser than $min’ , E_USER_WARNING );
return null ;
>

$range = $counter = $max — $min ;
$bits = 1 ;

$bytes = (int) max ( ceil ( $bits / 8 ), 1 );
$bitmask = pow ( 2 , $bits ) — 1 ;

if ( $bitmask >= PHP_INT_MAX ) $bitmask = PHP_INT_MAX ;
>

do $result = hexdec (
bin2hex (
mcrypt_create_iv ( $bytes , MCRYPT_DEV_URANDOM )
)
) & $bitmask ;
> while ( $result > $range );

return $result + $min ;
>
>
?>

Randomness test

$max = 100 ; // number of random values
$test = 1000000 ;

$array = array_fill ( 0 , $max , 0 );

for ( $i = 0 ; $i < $test ; ++ $i ) ++ $array [ random_int ( 0 , $max - 1 )];
>

function arrayFormatResult (& $item ) global $test , $max ; // try to avoid this nowdays 😉

$perc = ( $item /( $test / $max ))- 1 ;
$item .= ‘ ‘ . number_format ( $perc , 4 , ‘.’ , » ) . ‘%’ ;
>

array_walk ( $array , ‘arrayFormatResult’ );

Источник

rand

При вызове без параметров min и max , возвращает псевдослучайное целое в диапазоне от 0 до getrandmax() . Например, если вам нужно случайное число между 5 и 15 (включительно), вызовите rand(5, 15).

Замечание: На некоторых платформах (таких как Windows) getrandmax() всего лишь 32767. Чтобы расширить диапазон, используйте параметры min и max , или обратитесь к функции mt_rand() .

Список параметров

Наименьшее значение, которое может быть возвращено (по умолчанию: 0)

Наибольшее значение, которое может быть возвращено (по умолчанию: getrandmax() )

Возвращаемые значения

Псевдослучайное значение в диапазоне от min (или 0) до max (или getrandmax() ).

Примеры

Пример #1 Пример использования rand()

Результатом выполнения данного примера будет что-то подобное:

Примечания

Данная функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам требуется криптографически безопасное значение, подумайте об использовании функции openssl_random_pseudo_bytes() вместо данной.

Смотрите также

  • srand() — Изменяет начальное число генератора псевдослучайных чисел
  • getrandmax() — Возвращает максимально возможное случайное число
  • mt_rand() — Генерирует случайное значение методом mt
  • openssl_random_pseudo_bytes() — Generate a pseudo-random string of bytes

Источник

Генерация случайных буквенно-цифровых строк в PHP

Monty Shokeen

Monty Shokeen Last updated Nov 23, 2020

Позвольте мне начать этот пост, сказав, что почти ни одно событие не является случайным. Даже исход классического броска монеты теоретически можно было бы предсказать, если бы мы знали о влиянии каждого фактора, например, трения, гравитации и начальной силы.

То же самое применимо к генерации случайных чисел и буквенно-цифровых строк. Самое лучшее, на что мы можем надеяться, это генерировать числа и строки, которые не следуют шаблону и не могут быть практически предсказаны злоумышленником.

В этом уроке мы рассмотрим различные методы генерации случайных чисел и буквенно-цифровых строк в PHP. Некоторые из них будут криптографически безопасны, а другие предназначены только для случайного использования, например, назначение псевдослучайных имен файлов или создание URL-адресов и предложение имен пользователей.

Создание случайных чисел в PHP

Существуют три различные функции для генерации случайных чисел в PHP. Все они будут принимать минимальное и максимально возможное значение для случайных чисел и выдавать случайное число для вас. Это rand($min, $max) , mt_rand($min, $max) и random_int($min, $max) .

С rand() минимальные и максимальные значения целых чисел, которые вы можете генерировать, лежат между 0 и значением, возвращаемым функцией getrandmax() . До PHP 7.1.0 эта функция была примерно в четыре раза медленнее, чем mt_rand() . Однако, начиная с PHP 7.1.0, она была создана как псевдоним mt_rand() . В отличие от mt_rand() , вы можете установить значение $max меньше, чем $min , не вызывая ошибки.

С mt_rand() минимальные и максимальные значения целых чисел, которые вы можете генерировать, лежат между 0 и значением, возвращаемым mt_getrandmax() . Функция использует реализацию Mersenne Twister для генерации случайных чисел. Остерегайтесь, до PHP 7.1.0, эта функция реализовывала неверную версию алгоритма для генерации чисел. Однако он был исправлен в более новых версиях.

Функция стала еще лучше в PHP 7.2.0, избавившись от ошибки модульного смещения. Это означает, что для некоторых конкретных значений ваша последовательность случайных чисел теперь будет немного лучше по сравнению со старыми версиями. Однако какой-то специализированный код может действительно полагаться на эту предвзятость. Если это так, вы можете использовать более старый алгоритм, вызвав функцию mt_srand() для задания начального числа для генератора случайных чисел и передачи MT_RAND_PHP в качестве значения второго параметра.

Функция mt_rand() имеет период 2 19937 -1, что в основном означает, что в наилучших сценариях вы получаете целых 2 19937 -1 случайных чисел до того, как последовательность начнет повторяться. Следует отметить, что повторение последовательности не совпадает с повторением определенного числа. Другими словами, вы можете получить одно и то же случайное число дважды, но это не значит, что сама последовательность начала повторяться. Примером может служить следующая последовательность:

187 3276 1267 15 1267 34598 3467 125 17

В приведенной выше последовательности у нас было 1267 два раза на выходе, но это не означает, что после этого вся последовательность начала повторяться. Маловероятно, чтобы такое же число повторялось так быстро в случайной последовательности, но это возможно!

Криптографически безопасные случайные целые числа

Если вы хотите криптографически безопасные псевдослучайные числа, функция random_int() в PHP — ваш лучший выбор. Он будет генерировать случайные числа между предоставленными значениями $min и $max , которые по умолчанию соответствуют PHP_INT_MIN и PHP_INT_MAX . К сожалению, эта функция доступна только с PHP 7.0. Для версий до этого вы можете использовать этот полифилл на GitHub.

Случайные числа с плавающей точкой

Вместо генерации случайных целых чисел вы также можете генерировать числа с плавающей точкой. Это можно сделать легко, просто разделив случайное число на значение, возвращаемое mt_getrandmax() . В следующем примере будет проиллюстрировано, как создать случайное значение с плавающей точкой от 0 до 1 или между любыми другими минимальными и максимальными пределами.

Источник

Оцените статью