Is there a way to generate a random number based on a min and max?
For example, if min was 1 and max 20 it should generate any number between 1 and 20, including 1 and 20?
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
, you need to add intervals together, as described in this answer.
In a new PHP7 there is a finally a support for a cryptographically secure pseudo-random integers.
int random_int ( int $min , int $max )
random_int — Generates cryptographically secure pseudo-random integers
which basically makes previous answers obsolete.
random_int
and random_bytes
function - github.com/paragonie/random_compat.
Commented
Jan 8, 2017 at 19:41
random_int
? If it gives "better" random numbers, why not use it for non-crypto reasons?
Commented
Sep 21, 2017 at 16:13
random_int
s to rand
s. Also, my use case is a retry algorithm, and I definitely don't want multiple failed functions clumping after sleeping because of predictable random ints
Commented
Sep 21, 2017 at 18:18
A quicker faster version would use mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
Source: http://www.php.net/manual/en/function.mt-rand.php.
NOTE: Your server needs to have the Math PHP module enabled for this to work. If it doesn't, bug your host to enable it, or you have to use the normal (and slower) rand().
I have bundled the answers here and made it version independent;
function generateRandom($min = 1, $max = 20) {
// Prioritize `random_int` for security
if (function_exists('random_int')) {
return random_int($min, $max); // more secure
}
// Fallback to `mt_rand` if `random_int` isn't available
if (function_exists('mt_rand')) {
return mt_rand($min, $max); // faster
}
// Use `rand` as a last resort.
// Uncomment line below to warn about potential issues
// trigger_error("Using less secure 'rand' function for random number generation. Consider upgrading your PHP version.", E_USER_WARNING);
return rand($min, $max); // old
}
rand(1,20)
Docs for PHP's rand function are here:
http://php.net/manual/en/function.rand.php
Use the srand()
function to set the random number generator's seed value.
Try This one. It will generate id according to your wish.
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;
}
random_int()
,random_bytes()
, oropenssl_random_pseudo_bytes()
. as @Salvador Dali saidrand()
do not generate cryptographically secure results. See documentation php.net/manual/en/function.rand.php