I have searched high and low for an answer with no avail.
I am trying to insert a random id number for my users between 9999,99999999. Problem is they have to be unique. I have everything set up but with an auto increment set for the id. I figured I will keep the auto increment field and just add another row for the unique id.
This is what I got so far:
$id = mt_rand(9999,99999999);
$query = "SELECT * FROM accounts";
$result = mysql_query($query) or die(mysql_error());
while($account = mysql_fetch_array($result)){
if ($id == $account['id']){
$id = mt_rand(99开发者_运维知识库99,99999999);
} else {
$sql = "INSERT INTO accounts (id, username, email, password, sex)
VALUES ('$id', '$username', '$email', '$password', '$sex')";
mysql_query($sql);}}
Now I figured if I create a random number, check the database if it exists create another, else insert it, but it is not working, if it a simple solution I apologise.
Thanks again :)
this may seem like a silly answer:
If you are already using auto_increment
on a unique key, there is not a need to add another unique key
The code that follow is almost 100% sure that your will never repeat, I use myself, never hava any problem.
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$uuid = chr(123) // "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125); // "}"
return $uuid;
}
}
If you think it is not enough, try to create an prefix before the number, it can be the Year date('Y');
Good Luck
While not a "strong" PRNG (this is actually very weak), one approach is to use a PRNG as described in one-to-one random mapping. This particular solution is shows a PRNG solution for which the cycle length is the range. However, this solution can't be used 'as is' because the domain is different.
See Random-Order Keys -- indirectly from link above -- and the following sections which uses an Additive Congruential Method / Linear Feedback Shift Register PRNG. Here is a table showing the tap positions -- using a 2^23 would allow picking a guaranteed unique number between [9999, 9999 + 2^23-1) or [9999, 8398606). However, other transactional factors, such as "picking an ID but not using it" should be consider.
Obviously this should not be used for true "security" (even with a "true random random", a nonce -- which needs no unique constraint! -- and/or other verification system should be employed and the random IDs are simply an "obscurity" -- these are not security! -- layer.)
Happy coding.
you could just generate a uid, then check to see if it is used.
<?php
do {
$uid = rand(9999,99999999);
$sql = "SELECT * FROM `table` WHERE `uid`=$uid";
$result = mysql_query($sql);
while (mysql_num_rows($result) > 0);
// have $uid
?>
Or because you have the uid, then you could just run an equation on that to generate a uid (like a md5 or sha256 hash or something).
精彩评论