PHP和mySQL(i):如何生成一个随机的用户id


PHP & mySQL(i): How to generate a random user id?

如果我想给每个在我的网站上注册的用户一个唯一的id。在我看来,如果我想这样做,我必须:为id创建一个随机数,检查该id是否已经存在于数据库中,如果它确实存在,那么创建另一个随机数并发送另一个查询,看看它是否存在,等等…

这可能会持续很长时间。除了有一个递增的id,还有什么合适的方法来做到这一点吗?

最好的方法是通过auto increment函数,如果你真的不想使用这样的函数,你可以使用uniqid();

基本上它会生成一个基于毫秒的唯一id,如果你在函数中加入一个唯一的前缀它会生成一个非常独特的id

echo uniqid('prefix');

这样你就不必在生成id后检查它是否已经存在。你可以确定它是唯一的。

有关更多信息,请查看此url http://php.net/uniqid!

首先,我同意这些评论。这都是开销代码,如果您使用它是为了让它看起来有趣,那么您应该重新考虑您的优先级。

但是,如果你仍然需要它;这里有一些东西:

function uid() {
    mt_srand((double)microtime()*1000000);
    $token = mt_rand(1, mt_getrandmax());
    $uid = uniqid(md5($token), true);
    if($uid != false && $uid != '' && $uid != NULL) {
        $out = sha1($uid);
        return $out;
    } else {
        return false;
    }
}

基本上,它做了大量的随机数生成来为uniqueid创建一个令牌,然后就是sha。可能会产生开销,但可以确保永远不会生成双uid。

费边。

可以使用rand()函数。它将生成一个介于两者之间的随机数。

rand(0000,9999)

生成一个介于0到9999之间的数字。

检查是否已经存在:

$id = rand(0000,9999);
/* CREATE YOUR MYSQL CONNECTION */
$user_list = mysql_query("SELECT * FROM users");
while ($user = mysql_fetch_array($user_list))
{
    if ($id == $user['id'])
    {
        echo('Already exist.');
    }
    else
    {
        /* YOUR CODE */
    }
}

如果你有一串15个数字,你看到的是999万亿,考虑到地球上有近70亿人,我怀疑它能运行很长时间。

ID需要是数字吗?通过切换到字母字符,你会得到一个很多更多的熵。一个6位数的数字有1,000,000种可能,一个6个字符的字母数字字符串有2,176,782,336种可能。如果是混合大小写字母数字,那么这个数字将跳转到15625,000,000。

以下是我通常如何生成尽可能短的唯一字符串的方法:
$chars = 'abcdefghijklmnopqrstuvwrxyzABCDEFGHIJKLMNOPQRSTUVWRXYZ0123456789';
mt_srand((double)microtime()*1000000);
$id = '';
do {
  $id .= $chars[mt_rand(0, strlen($chars) - 1)];
} while (isIdTaken($id));
var_dump($id);

你必须创建一个批次的项目与这种风格的id,之前你会得到超过3或4个字符。

我知道现在给出这个答案有点晚了,但最简单的解决方案是生成随机数,并确保它是唯一的100%是

$uid = uniqid().date("Ymdhhis");