RE: [PHP] creating random strings?
| From: | Sean Malloy | Date: | Thu, 19 Dec 2002 23:58:56 +0000 |
| Subject: | RE: [PHP] creating random strings? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-128920@lists.php.net to get a copy of this message | ||
My comment would be on the readability and portability of the code.... Think
of someone else coming along to look at that! ;)
This is what I would do; create one function, GenerateString(int $length,
int $type)
function GenerateString($length = 6, $type = 1)
{
$string = '';
// seed rand function
list($usec, $sec) = explode(' ', microtime());
$microtime = ((float)$usec + (float)$sec);
srand((double) $microtime * 1000000);
// loop till $length - 1
for ($i = 0; $i < $length; $i++)
{
// its a password, set the choice to be between 1 and 4
if ($type == 2)
{
$choice = rand(1, 4);
}
// its a username, set the choice to be between 1 and 2
else
{ $choice = rand(1, 2); }
switch ($choice)
{
//generate a random number representing ascii character between a-z
case 1:
case 2: $min = 97; $max = 122; break;
//generate a random number representing ascii character between 0-9
case 3:
case 4: $min = 48; $max = 57; break;
}
// add the character to our string
$string .= chr(rand($min, $max));
}
// return our generated string
return $string;
}
// for readability
define('L_USER', 1);
define('L_PASS', 2);
//for a username, you want 8 character a - z
$username = GenerateString(8, L_USER);
//for a username, you want 6 character a - z and 0-9
$password = GenerateString(6 L_PASS);
Hope that gives you some alternative ideas to explore
> -----Original Message-----
> From: Paul Chvostek [mailto:paul+php@it.ca]
> Sent: Friday, 20 December 2002 10:47 AM
> To: php-general@lists.php.net
> Subject: [PHP] creating random strings?
>
>
>
> I need to create batches of randomly generated usernames and passwords.
> To start off, I have:
>
> $validuchars='abcdefghijkmnopqrstuvwxyz';
> $validpchars='abcdefghijkmnopqrstuvwxyz23456789';
> $lenu=strlen($validuchars)-1;
> $lenp=strlen($validpchars)-1;
>
> The first method I came up with was:
>
> $uid=''; for($i=8;$i;$i--) $uid.=substr($validchars,mt_rand(0,$lenu),1);
> $pwd=''; for($i=8;$i;$i--) $pwd.=substr($validchars,mt_rand(0,$lenp),1);
>
> But I'm wondering if there's any significant benefit to this instead:
>
> for( $uid=''; strlen($uid)<8;
> $uid.=substr($validuchars,mt_rand(0,$lenu),1) );
> for( $pwd=''; strlen($pwd)<8;
> $pwd.=substr($validpchars,mt_rand(0,$lenp),1) );
>
> I can't see any difference in speed. Does the savings of the $i variable
> have any signficance at all?
>
> Another thing I was thinking of doing was making more pronouncable
> usernames with something like:
>
> $cons="bcdfghjklmnpqrstvwxyz";
> $vowels="aeiouy";
> $lenv=strlen($vowels)-1;
> $lenc=strlen($cons)-1;
> $uid=""; for($i=4;$i;$i--)
> $uid.=substr($cons,mt_rand(0,$lenc),1) .
> substr($vowels,mt_rand(0,$lenv),1);
>
> Any thoughts?
>
> Incidentally, I'm guaranteeing uniqueness of usernames with a unique
> index in the MySQL table that stores this stuff. Including the INSERT,
> I can create about 100000 of these in 60 seconds. So this is more a
> question of style than of practical limitations. ;)
>
> --
> Paul Chvostek <paul@it.ca>
> Operations / Abuse / Whatever +1 416 598-0000
> it.canada - hosting and development
> http://www.it.ca/
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>