Solved

php random id generator 8 char alpha numeric

Posted on 2009-07-03
10
2,268 Views
Last Modified: 2012-05-07
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
0
Comment
Question by:webgeek154
  • 3
  • 2
  • 2
  • +2
10 Comments
 
LVL 11

Expert Comment

by:BrianMM
ID: 24772122
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
 
LVL 4

Expert Comment

by:fsouzabrasil
ID: 24772133
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
 
LVL 4

Expert Comment

by:fsouzabrasil
ID: 24772141
ops... subs for number 10 to number of alpha chars.
0
 
LVL 11

Expert Comment

by:BrianMM
ID: 24772145
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
 
LVL 27

Expert Comment

by:yodercm
ID: 24772220
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 7

Expert Comment

by:szewkam
ID: 24772429
or just use uniqid function from php ;)
http://php.net/manual/en/function.uniqid.php
On site you have examples of use :)
0
 
LVL 11

Accepted Solution

by:
BrianMM earned 500 total points
ID: 24772657
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
 

Author Closing Comment

by:webgeek154
ID: 31599550
thansk!
0
 
LVL 27

Expert Comment

by:yodercm
ID: 24773018
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
 

Author Comment

by:webgeek154
ID: 24773052
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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now