NYCPHP Meetup

NYPHP.org

[nycphp-talk] generate random unique 8-digit number

Rolan Yang rolan at omnistep.com
Tue Mar 10 13:04:06 EDT 2009


Dan Cech wrote:
> ...
>
> If you're trying to generate relatively short pseudo-random IDs to
> thwart guesses, then the simplest method is going to be the
> previously-recommended approach of generating a random number and
> checking if it has already been used, rinse and repeat until you find
> one that has not.  This will get progressively slower as the number of
> IDs generated grows, but is the only way you can be 100% sure of a truly
> random ID which will never conflict.
>
> ...
>   
Depending on the number of results needed, building an array of all 
possible combinations and then removing each when randomly selected is 
another option.  For an 8 digit base-10 pool, the memory required would 
be huge. Sample code below. Can anyone calculate the break-even point at 
which it is faster to use this vs the random guess method mentioned 
above? :)

<?php

$digits=5; // change this to 8 if you have enough memory
$limit=pow(10,$digits);

$biglist=array();

// stuff the array
for ($x=0;$x<$limit;$x++) {
    $biglist[$x]=$x;
}

// run through guesses
for ($x=0;$x<10;$x++) {
    $pick=rand(0,count($biglist));
    printf("random #=$x - %0{$digits}d\n",$biglist[$pick]);
    array_splice($biglist,$pick,1);
}

?>

~Rolan




More information about the talk mailing list