A better solution would be mt_rand
which uses Mersenne Twister which much more better.
As has been pointed out, the str_shuffle method is not equivalent to the code I’m already using and will be less random due to the string’s characters remaining the same as the input, only with their order changed. However I’m still curious as to how the str_shuffle function randomizes its input string.
To make the output equal lets just use 0,1
and look at the visual representation of each of the functions
Simple Test Code
header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for($y = 0; $y < 512; $y ++) {
for($x = 0; $x < 512; $x ++) {
if (testMTRand()) { //change each function here
imagesetpixel($im, $x, $y, $white);
}
}
}
imagepng($im);
imagedestroy($im);
function testMTRand() {
return mt_rand(0, 1);
}
function testRand() {
return rand(0, 1);
}
function testShuffle() {
return substr(str_shuffle("01"), 0, 1);
}
Output testRand()
Output testShuffle()
Output testMTRand()
So basically I’d like to know how str_shuffle randomizes the string. Is it using rand() or mt_rand()? I’m using my random string function to generate passwords, so the quality of the randomness matters.
You can see clearly that str_shuffle
produces almost same output as rand
…