php random id generator 8 char alpha numeric

Hi Guys,

I need to generate an 8 character alpha numeric string which I can use as a unique identifier for all new subscribers to a site.

Php experts, can help me with this?

Your help is very much appreciated.  : )

Thanks,
John
webgeek154Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

BrianMMCommented:
I came up with this... it should create something with very slim chance of duplicates every few million! or has done for me!
$newid = md5rand(8);
 
function md5rand ($length) {
	$pass1 = strtoupper(md5(rand(0, 1000000)));
	$rand_start = rand(5,strlen($pass1));
	if($rand_start == strlen($pass1)) {
		$rand_start = 1;
	}
	$pass2 = strtoupper(substr(md5($pass1), $rand_start, $length));
$length));
	return $pass2;
}

Open in new window

0
fsouzabrasilCommented:
add on array all alpha char and on array_rand insert number of indexes this array.
for
 $vlr = array("0", "1", "2", "3", "4", "5", "6", "7", "8","9","a","b","c","d","e","f","g");
$vlr0 = "";
for ($i = 1; $i <= 10; $i++) {
 $rand_num = array_rand($vlr, 17);
 $vlr0 += $rand_num[0];
}
echo $vlr0;

Open in new window

0
fsouzabrasilCommented:
ops... subs for number 10 to number of alpha chars.
0
Introduction to R

R is considered the predominant language for data scientist and statisticians. Learn how to use R for your own data science projects.

BrianMMCommented:
here are a couple others i have too;
echo rand_str(8);
echo generateRandStr(8);
 
function rand_str($length = 32, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')
{
    // Length of character list
    $chars_length = (strlen($chars) - 1);
 
    // Start our string
    $string = $chars{rand(0, $chars_length)};
   
    // Generate random string
    for ($i = 1; $i < $length; $i = strlen($string))
    {
        // Grab a random character from our list
        $r = $chars{rand(0, $chars_length)};
       
        // Make sure the same two characters don't appear next to each other
        if ($r != $string{$i - 1}) $string .=  $r;
    }
   
    // Return the string
    return $string;
}
 
function generateRandStr($length){
      $randstr = "";
      for($i=0; $i<$length; $i++){
         $randnum = mt_rand(0,61);
         if($randnum < 10){
            $randstr .= chr($randnum+48);
         }else if($randnum < 36){
            $randstr .= chr($randnum+55);
         }else{
            $randstr .= chr($randnum+61);
         }
      }
      return $randstr;
   }

Open in new window

0
Cornelia YoderArtistCommented:
You can prevent duplicates with this method
do{
        $usernumber=...//however you generate it...
        $result=mysql_query("Select * from $globalusertable where usernumber=$usernumber;");
}while(mysql_num_rows($result)>0);

Open in new window

0
szewkamCommented:
or just use uniqid function from php ;)
http://php.net/manual/en/function.uniqid.php
On site you have examples of use :)
0
BrianMMCommented:
the uniqueid function in php is'nt very unique :) depending on how you are using it it can generate the same id quite often. I have better functions, combine that with the idea from yodercm it's pretty foolproof.

Below are 3 other functions i generally use for UUIDs, I am quite fond of the one that prefixes the ID with something standard, then for a user you can prefis it with say 'U' then you know anything beginning with a U is a user and so on.
function generateRand_uuid ( $prefix = 'W' ) {
	// Perfect for: UNIQUE ID GENERATION
	// Create a UUID made of: PREFIX:TIMESTAMP:UUID
	$my_random_id = $prefix;
	$my_random_id .= chr ( rand ( 65, 90 ) );
	$my_random_id .= time ();
	$my_random_id .= uniqid ( $prefix );
	return $my_random_id;
}
 
function generateRand_uuid_l ( $prefix = 'W', $length=0 ) {
	// Perfect for: UNIQUE ID GENERATION
	// Create a UUID made of: PREFIX:TIMESTAMP:UUID(PART - LENGTH - or FULL)
	$my_random_id = $prefix;
	$my_random_id .= chr ( rand ( 65, 90 ) );
	$my_random_id .= time ();
	$my_uniqid = uniqid ( $prefix );
	if($length > 0) {
		$my_random_id .= substr($my_uniqid, $length);
	} else {
		$my_random_id .= $my_uniqid;
	}
	return $my_random_id;
}
 
function generateRand_md5uid(){
	// Perfect for: UNIQUE ID GENERATION
	// Create a really STRONG UUID
	// Very high odds of creating a unique string 1:1000000+
	$better_token = md5(uniqid(rand(), true));
	$unique_code = substr($better_token, 64);
	$uniqueid = $unique_code;
	return $better_token;
}

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
webgeek154Author Commented:
thansk!
0
Cornelia YoderArtistCommented:
Despite ignoring my post, please remember that even the functions given by BrianMM are able to produce non-unique values.  Please use them within the loop method I gave you, to ENSURE uniqueness.
0
webgeek154Author Commented:
Hi Yoder,

Sorry about that.  What happened is that a colleague of mine handed me the code i needed right after submitting the post.  Then i started seeing responses so I came back and closed it as fast as possible so I didn't waste more of people's time.

But thanks.  I really do appreciate your help.  Really.

Thanks,
John
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
PHP

From novice to tech pro — start learning today.