Pseudo-Random vs. True Random
A Simple Visual Example
Once upon a time I stumbled across Random.org, an awesome true random number generation service. The difference between true random number generators (TRNGs) and pseudo-random number generators (PRNGs) is that TRNGs use an unpredictable physical means to generate numbers (like atmospheric noise), and PRNGs use mathematical algorithms (completely computer-generated). You can read more about this at Random.org and Wikipedia.
I was messing around with the Bitmap Generator, when I decided to create a pseudo-random generated bitmap of my own to compare. And wouldn't you know it, the very first thing I tried showed a pattern!
Random.org Bitmap
PHP rand() on Windows Bitmap
Yikes! Not so "random" eh?
Not many PRNGs will produce an obvious visual pattern like this, it just so happens to be a really bad combination of language (PHP), operating system (Windows), and function (rand()). I ran the same code in a Linux environment, and it did not have an obvious visual pattern. I also ran the same code again in Windows, but using PHP's mt_rand() function instead, which utilizes the Mersenne Twister to generate a better random number, and it did not have an obvious visual pattern. If you want to know more about why this happens, read this.
Here's the code I used to generate the bitmap:
<?php
// Requires the GD Library
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 (rand(0, 1)) {
imagesetpixel($im, $x, $y, $white);
}
}
}
imagepng($im);
imagedestroy($im);
Basically, it's the sort of thing you wouldn't need worry about with a true random number generator, unless somehow it's security was breached (a whole other topic really). Pseudo-random number generators vary greatly in quality. Some are horrible, some are extraordinary, but none are true.