(PHP 4, PHP 5, PHP 7, PHP 8) rand — Génère une valeur aléatoire rand(): int rand(int $min, int $max): int Appelée sans les options min et max, rand() retourne un nombre pseudoaléatoire entre 0 et
getrandmax(). Si vous voulez un nombre aléatoire entre 5 et 15 (inclus), par exemple, utilisez rand (5, 15). Attention Cette fonction ne génère pas de valeurs sécurisées d'un point de vue cryptographique, et ne doit pas être utilisée dans un contexte de chiffrement. Si vous avez besoin d'une valeur sécurisée d'un point de vue cryptographique, utilisez plutôt random_int(), random_bytes(), ou
openssl_random_pseudo_bytes(). Note: Sur quelques plates-formes (par exemple, Windows), mt_getrandmax()est limité à 32767. Si vous désirez une limite supérieure à 32767, en spécifiant min et max, vous serez autorisés à utiliser un intervalle plus grand que mt_getrandmax(), ou bien, utilisez la fonction mt_rand() à la place. Note: À partir de
php 7.1.0, rand() utilise le même générateur de nombres aléatoires que mt_rand(). Pour préserver la compatibilité ascendante, rand() permet à max d'être plus petit que min par opposition au retour false de mt_rand() La plus petite valeur à retourner (par défaut, 0) La plus grande valeur à retourner
(par défaut, mt_getrandmax()) Une valeur pseudoaléatoire, comprise entre min (ou 0) et max (ou mt_getrandmax(), inclusif). Exemple #1 Exemple avec rand() <?php echo Résultat de
l'exemple ci-dessus est similaire à : Avertissement La plage min max doit se situer dans la plage getrandmax(). i.e. (max - min) <= getrandmax() sinon, rand() peut retourner des nombres aléatoires de mauvaise qualité. whatchildisthis at gmail dot com ¶ 13
years ago I also enjoy making one-liners. Here's a non-regular expression approach. It generates a random 32 character string consisting of, by default, only A-Z, a-z, and 0-9, but you can change the value of $a for other characters. The random string will be in variable $s after this line. <?php <?php <?php Examples: relsqui at armory dot
com ¶ 17 years ago Don't forget, it's faster to use bitwise operations when you need a random number that's less than some power of two. For example, <?php petabyte.se ¶ 13 years ago As an further optimization on janoserki[at]gmail[dot]com previous post i would recommend that you optimize you first part of php/sql code to something like this. <?php Alireza Eliaderani ¶ 11 years ago Random integers with normal distribution, <?php Justin Richer ¶ 10 years ago Since many people (myself included) come to this page looking for a way to do a random string, I present a way that uses
arrays and shuffle() instead of rand(). This also has the effect of not repeating any characters in the value set. $arr = str_split('ABCDEFGHIJKLMNOP'); // get all the characters into an array jont at live dot co dot uk ¶ 15 years ago isn't this just a simpler way of making a random id for somthing? I mean i know that there is a very slight chance that a duplicate could be made but its a very, very, very small chance, nearly impossible. $rand = mt_rand(0, 32); and if you don't want it the md5 can be removed, I've just added it as a prefer it there :) Jon janoserki [at] gmail [dot] com ¶ 13 years ago Easy way for mysql: random row <?php Ishtar ¶ 14 years ago A small comment on phpdev-dunnbypauls conclusion that rand() only generates numbers that are a multiply of 3. phpdev at dunnbypaul dot net ¶ 15 years ago Here's an interesting note about the inferiority of the rand() function. Try, for example, the following code... <?php Array Within this range only multiples of 3 are being selected. Also note that values that are filled are always 30 or 31 (no other values! really!) Now replace rand() with mt_rand() and see the difference... Array Much more randomly distributed! Conclusion: mt_rand() is not just faster, it is a far superior algorithm. shiawase at gmail dot com ¶ 11 years ago Another one-liner to generate strings: kyle dot florence [@t] gmail dot com ¶ 13 years ago Improved random string generation function: <?php matheus at matheusloureiro dot com ¶ 9 years ago If you are looking for generate a random expression, like password with alphanumeric or any other character, use this function: <?php return $Hash;} //Here you specify how many characters the returning string must have echo GeraHash(30); ?> abdufarag at yahoo dot com ¶ 1 year ago I have made this example to generate random number with specific length (10). <?php for ( $i = 0 ; $i < 100 ; $i++){$x = gen(); echo $x,PHP_EOL; } ?>razvan_bc at yahoo dot com ¶ 3 years ago well , this is my vision about "custom random string" : <?phpfunction s($length){ Wirek ¶ 7 years ago I agree with Sebmil (http://php.net/manual/en/function.array-rand.php#105265) that
"array_rand()" produces weird and very uneven random distribution (as of my local PHP 5.3.8 and my public host's PHP 5.2.17). Hayley Watson ¶ 9 years ago The Windows rand() function is quite a lot worse than merely having a low maximum value. It's an ordinary Linear Congruential Generator, which means you only need three consecutive values to be able to predict its entire future output. Given the
numbers 13050, 4267, 25352, construct the equations Solving for a and c gives a = 20077 Which means the next number that should be spat out is (25352×20077+12345) % 32768 = 19105 -- which indeed it is. It's not the small rand_max that breaks the algorithm, it's a weakness in the LCG algorithm itself. It's designed for when you only want a few kinda-random numbers occasionally, not if you want to generate any random-looking data. Hugo Scott hrmscott at hotmail dot com ¶ 13 years ago Here's a simple function to generate a random date between a start date and an end date. It is inclusive of BOTH dates - so using dates 2009-04-01 and 2009-04-03 would generate a random date that could be 2009-04-01, 2009-04-02 or 2009-04-03. It won't work if the end date is prior to the start date and if you use a non-existant date (eg 2009-02-30) it defaults to 1970-01-01 the longer version: opbarnes ¶ 13 years ago Generate a random 5 character alpha string: <?php bozo_z_clown at yahoo dot com ¶ 15 years ago Note that the automatic seeding seems to be done with the current number of seconds which means you can get the same results for several runs on a fast server. Either call srand() yourself with a more frequently changing seed or use mt_rand() which doesn't appear to suffer from the problem. pasafama at gmail dot com ¶ 5 years ago From PHP 7.1 rand() is documented as an alias of mt_rand(). Actually, if they are called with two arguments where the second is smaller than the first, their output differs. For example var_dump(rand(2,1), mt_rand(2,1)); may return Warning: mt_rand(): max(1) is smaller than min(2) where rand() will return a random value between $max and $min Anonymous ¶ 14 years ago quick way to generate randomish numbers and simple strings. not the most perfect for sure, but ok for plenty of situations... <?php $random_number = intval( "0" . rand(1,9) . rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9) ); // random(ish) 5 digit int$random_string = chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)); // random(ish) 5 character string?>hope someone finds it useful for somthing. regards, John Galt ¶ 12 years ago Another way to create an array of random numbers where there are no identical numbers. ($n = number of random numbers to return in the array <?php thibault dot debatty at gmail dot com ¶ 10 years ago In Suhosin version 0.9.26 (released 2008.08.22) and above: davidsteinsland [at] gmail [dot] com ¶ 14 years ago emad_ramahi at hotmail dot com: The way I see it, you have to workable solutions: Using PHP: <?php ludicruz at yahoo dot com ¶ 15 years ago frank, nick at nerdynick dot com, and kniht <?php Zak ¶ 10 years ago I couldn't find a suitable random alpha-numeric generator function so I rolled my own. It gives a random number in base 36 (0-9, a-z) to a given length. <?php mparsa1372 at gmail dot com ¶ 1 year ago Change Background Color With Rand() And Style : <?php $r = rand(0,255);$g = rand(0,255); $b = rand(0,255); echo '<body style="background-color:'."rgb($r, $g, $b)" . '">';?> matthias dot isler at gmail dot com ¶ 10 years ago I had to create a function that generates a random binominal distributed integer. Take a look at the following Wiki article: http://en.wikipedia.org/wiki/Binomial_distribution Here is my solution: <?phpfunction bin_rand($min = null, $max = null) Anonymous ¶ 12 years ago Generate a random 5 character A-Z0-9 string <?php moonwalker509 at gmail dot com ¶ 5 years ago I wrote this many years back and just found it. thought I share. what it does is generate either random numbers 0-9, Alphabets A-Z or Alphanumeric which is a combination of numbers and alphabets. I turned it into a class before sharing. do with it what you please. Solved some of my problems. <?php for ( $i = 0; $i < $length; $i++) {$id .= $chars[mt_rand(0,$clen)]; } return ($id); } public static function Alphabets($length){ $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $clen = strlen( $chars )-1; $id = ''; for ( $i = 0; $i < $length; $i++) {$id .= $chars[mt_rand(0,$clen)]; } return ($id); } public static function AlphaNumeric($length){ $chars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $clen = strlen( $chars )-1; $id = ''; for ( $i = 0; $i < $length; $i++) {$id .= $chars[mt_rand(0,$clen)]; } return ($id); } } echo Random::Numeric(6); # eg result: "567268"echo Random::Alphabets(9); # eg result: IAGRmZyJS echo Random::AlphaNumeric(10); #eg result: Gzt6syUS8M?> david [at] ddrewdesign [dot] com ¶ 13 years ago To Jano and Peta: Thanks for the code. In real world usage, I only had one problem with it: It will never return the first result of the array (or it will return nothing if there's only one item in the array). To remedy this, I simply subtracted 1 from <?php <?php Alex Khimch alex at khim dot removeit dot ich dot org ¶ 11 years ago Random is NOT actually random. It is easily illustrated by multiplying rand(1,500) by rand(1,500) and showing the output on the image: <?php for( $i=0;$i<500;$i++) {for($j=0;$j<500;$j++) { imagesetpixel($img, rand(1,500), rand(1,500), $ink1); } }imagepng($img); imagedestroy($img);?> I expected to get pixel noise, but instead one can see plain diagonal lines. admin at djs-music dot com ¶ 13 years ago A nice function to generate a random string, using any character: <?php Sample output: $%29zon(4f simon at labs dot coop ¶ 8 years ago Something we discovered in Sydney running BBS Systems before the net advent was here, if we didn't seed of another BBS we would going in circles in our System Physicality Abstraction Layers.. The important thing is to seed from a remote system and easy way at the Centroidal Plexus of the web (Chronolabs Cooperative) we offer a seed feed and the following code will randomise you out of the number cycle: See in PHP both the letters and numbers are seedable as letters are treated as numbers as well. You can always use individual tokens by extracting the Element with DOM.. But below is equally effective! <?php srand (file_get_contents('http://seed.feeds.labs.coop')); ?>szeryf.wordpress.com ¶ 11 years ago Much easier way to generate random string of numbers and letters: <?php Greg R. ¶ 13 years ago I thought this function (random color) might be of use to someone [to create and return a random hex for HTML colors]: <?php liveonaware [at] gmail [dot] com ¶ 12 years ago <?php //removed number 0,
capital o, number 1 and small L "A","B","C","D","E","F","G","H","J","K","L","M", "N","P","Q","R","S","T","U","V","W","X","Y","Z", "1","2","3","4","5","6","7","8","9");//make an "empty container" or array for our keys $keys = array();//first count of $keys is empty so "1", remaining count is 1-6 = total 7 times while(count($keys) < 7) { //"0" because we use this to FIND ARRAY KEYS which has a 0 value //"-1" because were only concerned of number of keys which is 32 not 33 //count($characters) = 33 $x = mt_rand(0, count($characters)-1); if(!in_array($x, $keys)) { $keys[] = $x; } } foreach( $keys as $key){$random_chars .= $characters[$key]; } echo $random_chars; ?> smaaps at kaldamar dot de ¶ 17 years ago Lately I needed some random numbers with a gaussian (normal) distribution, not evenly distributed as the numbers generated by rand(). After googling a while, I found out that there is no perfect algrorithm that creates such numbers out of evenly distruted random numbers but a few methods that have similar effect. The following function implements all three algorithms I found- The the last two methods create numbers where you can find a lower and upper boundary and the first one will create a number from time to time (such as one in every 10000) that may be very far from the average value. Have fun testing and using it. <?php switch( $algorithm) { //polar-methode by marsagliacase "polar": $v = 2; while ($v > 1) { $u1 = rand(0, $randmax) / $randmax; $u2 = rand(0, $randmax) / $randmax; $v = (2 * $u1 - 1) * (2 * $u1 - 1) + (2 * $u2 - 1) * (2 * $u2 - 1); } return ( 2* $u1 - 1) * (( -2 * log($v) / $v) ^ 0.5); // box-muller-methodcase "boxmuller": do { $u1 = rand(0, $randmax) / $randmax; $u2 = rand(0, $randmax) / $randmax; $x = sqrt(-2 * log($u1)) * cos(2 * pi() * $u2); } while (strval($x) == "1.#INF" or strval($x) == "-1.#INF"); // the check has to be done cause sometimes (1:10000) // values such as "1.#INF" occur and i dont know why return $x; // twelve random numbers case "zwoelfer": $sum = 0; for ($i = 0; $i < 12; $i++) { $sum += rand(0, $randmax) / $randmax; } return $sum; } } ?> Anonymous ¶ 1 year ago Note that the algorithm change in version 7.1.0 broke the repeatability of a random sequence initialized with a given value. For example if you have a program like: <?php |