0

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

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,做一个循环,有什么想法吗?

编辑:

如果需要,新的 for 循环函数:

函数 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();
4

3 回答 3

0

看起来你想要这样的代码..

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;
    }
}

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

于 2013-09-22T10:17:55.900 回答
0

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

如果你真的想用 PHP,uniqid()加上rand()生成一个不会冲突的唯一种子。

像这样的东西

<?php
echo $id = uniqid(rand(), true);
?>
于 2013-09-22T10:00:00.503 回答
0

只是你可以使用唯一的ID

<?php

function genID() {
    return uniqid();
}

echo genID();

?>
于 2013-09-22T10:05:42.273 回答