循环以检查重复的随机字符串


Loop to check dupilicate random strings

>我有这个函数来创建随机字符串:

function genID($length) {
    $chars = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@!"; 
    //only allowed chars in the blowfish salt.
    $size = strlen($chars); $str = "";
    for ($i = 0; $i < $length; $i++)
        $str .= $chars[rand(0, $size - 1)]; // strings can be used as char arrays
        // Yes, I am aware this salt isn't generated using the OS source.
        // use mycrypt_create_iv or /dev/urandom/
    return $str;
}

此输出如下所示:

@iBUQvldLq

现在我有这样的用户列表:

  userid    |   username   |  usermail ...
--------------------------------------
@iBUQvldLq        test      test@gmaik.com ....

现在,当某个寄存器创建新字符串并将新字符串插入userid数据库中的行时,然后我创建一个新字符串,然后检查创建的新字符串是否存在,如下所示:

function newID()
{
     $newid = genID(10);
     $query = "SELECT * FROM users WHERE userid = '".$newid."'";
     $result1 = mysql_query($query);
     $num = mysql_num_rows($result1);
     if($num == 1)
     {
         $newid = genID(10);
         return $newid;
     }
     else
     {
         return $newid;
     }
}

有人知道如何循环检查功能吗?

我的意思是生成函数创建新的随机字符串,然后函数检查它是否已经存在,然后创建一个新的字符串,如果没有返回创建的字符串。

所以现在如果他创建了一个新的,并且新的也匹配相同的其他userid,那么我如何循环直到新字符串永远不会与其他userid字符串匹配?

类似循环的东西:

  1. 创建新字符串

  2. 验证是否存在

  3. 如果存在,请创建一个新的

  4. 如果新的也存在,则创建新的,依此类推

直到它永远无法匹配其他userid,做一个循环,有什么想法吗?

编辑:

如果需要

,循环的新功能:

函数 newID(){

   $continue = true;
   while ($continue) {
   $newid = genID(10);
   $query = mysql_query("SELECT * FROM users WHERE userid='".$newid."' LIMIT 1");
    if (mysql_num_rows($query) != 1)
    $continue = false;
    return $newid;
}

}

$newid = newID();

看起来像你想要的代码是这样的。

function uHash(){
    $continue = true;
    while ($continue) {
        $hash = substr(MD5(microtime()), 0, 7);
        $query = mysql_query("SELECT `Link` FROM Table WHERE `value`='$hash' LIMIT 1");
        if (mysql_num_rows($query) != 1)
            $continue = false;
        return $hash;
    }
}

脚本将循环,直到找到唯一值。

user_id列设置为auto_increment字段可以解决此问题。[最佳方法]

如果你真的想用PHP,uniqid()rand()结合起来,生成一个不会碰撞的独特种子。

像这样的东西

<?php
echo $id = uniqid(rand(), true);
?>

只是你可以用于唯一id

<?php
function genID() {
    return uniqid();
}
echo genID();
?>