如果我想给在我的网站上注册的每个用户一个唯一的ID。在我看来,如果我想这样做,我将不得不:为id创建一个随机数,检查数据库中是否已存在该ID,如果它确实存在则创建另一个随机数并发送另一个查询看看是否存在,依此类推......
这可能会持续很长时间。除了增加id之外,还有什么可行的方法吗?
最好的方法是通过自动增量功能,如果你真的不想使用这样的函数,你可以使用uniqid();
基本上你它会根据毫秒生成一个唯一的id,如果你在函数中添加一个唯一的前缀,它将生成一个非常独特的id。
echo uniqid('prefix');
这样,您不必在生成ID后检查它是否已存在。你可以肯定它是独一无二的。
有关更多信息,请查看此网址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创建一个令牌,然后就是那个。可能是开销,但你可以肯定你永远不会产生双重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种可能性。使其成为混合大小写的字母数字,并跳至15,625,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);
在你获得超过3或4个字符之前,你必须使用这种id风格创建很多项目。
我知道这个答案已经晚了,但最简单的解决方案是生成随机数,并确保它是100%唯一的
$uid = uniqid().date("Ymdhhis");