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

时间:2013-09-22 09:55:09

标签: php

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

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. 如果新的还存在,则创建新的

  5. 直到它永远不匹配其他userid,制作一个循环,任何想法?

    已编辑:

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

    function 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();
    

3 个答案:

答案 0 :(得分:0)

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

如果您真的想要使用PHP,请将 uniqid() rand() 结合使用,以生成不会发生碰撞的唯一种子。< / p>

像这样的东西

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

答案 1 :(得分:0)

您可以使用唯一ID

<?php

function genID() {
    return uniqid();
}

echo genID();

?>

答案 2 :(得分: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;
    }
}

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