Scripts
Pseudo Random Number Generator
Ik las in een topic over random getallen. Ik heb daar voor mijn PWS een leuke class voor geschreven. (mijn PWS ging over cryptografie). Nu deel ik deze maar even met jullie :) Misschien hebben jullie er nog wat aan. Opmerkingen zijn van harte welkom :)
pseudo-random-number-generator
<?php
/*
* PseudoRandomGenerator
* PRNG
*
* Gebruikt bestand voor seeding
* en meestal de bron van microtime()
*
* file: randomseed.txt
*/
class PRNG {
/*
* Bestand waar random word opgeslagen
*/
const FILE = 'randomseed.txt';
/*
* get Seed of microtime;
*
* @param option
* @return seed
*/
private function getSeed($options = 3) {
switch($options)
{
case 1:
// van php.net
list($usec, $sec) = explode(' ', microtime());
$seed = (float) $sec + ((float) $usec * 1000000);
break;
case 2:
$seed = (double)microtime()*1000003;
break;
case 3:
// Gejat van PHP.net
$seed = hexdec(substr(md5(microtime()), -8)) & 0x7fffffff;
break;
default:
break;
}
return $seed;
}
/*
* Laat laatste random van bestand
*
* @return seed
*/
private function loadLastRandom() {
if(file_exists(self::FILE)) {
return file_get_contents(self::FILE);
} else {
return 0;
}
}
/*
* Schrijf laatste random naar bestand
*
* @return boolean;
*/
private function writeLast($seed = 0) {
$fp = fopen(self::FILE,'wb');
if(!$fp) {
throw new runtimeException('Bestand kan niet gemaakt of geschreven worden, seed file');
}
if(!fwrite($fp,$seed)) {
return false;
}
fclose($fp);
}
/*
* Get Seed
*
* @param option ref to getSeed
* @return boolean;
*/
static public function Seed($type = 3) {
mt_srand((self::loadLastRandom() + self::getSeed($type)) & 0x7fffffff);
if(self::writeLast(mt_rand()) !== false) {
return true;
}
return false;
}
}
?>
Reacties
0