如果我想给在我网站上注册的每个用户一个唯一ID。在我看来,如果我想这样做,我将不得不:为id创建一个随机数,检查数据库中是否已存在该ID,如果它确实存在则创建另一个随机数并发送另一个查询看看是否存在,等等......
这可能会持续很长时间。除了增加id之外,还有什么好办法吗?
答案 0 :(得分:4)
最好的方法是通过自动增量功能,如果你真的不想使用这样的函数你可以使用uniqid();
基本上你它会根据毫秒生成一个唯一的id,如果你在函数中添加一个唯一的前缀,它将生成一个非常独特的id。
echo uniqid('prefix');
通过这种方式,您无需在生成ID后进行检查(如果已存在或不存在)。你可以肯定它是独一无二的。
有关详情,请查看此网址http://php.net/uniqid!
答案 1 :(得分:1)
您可以使用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 */
}
}
这就是我做的方式......
答案 2 :(得分:1)
首先,我同意这些意见。这是所有开销代码,如果你使用它来使它看起来很有趣,你应该重新考虑你的优先事项。
但是,如果你仍然需要它;这里有一点点:
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。
费边。
答案 3 :(得分:0)
如果你有一串15个数字,你正在寻找高达999万亿的数字,我怀疑它会在“年龄”上运行,因为这个地球上有将近70亿人。
答案 4 :(得分:0)
ID需要是数字吗?通过切换到字母字符,您将获得 lot 更多的熵。 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);
您必须使用此ID样式创建 lot 项目,然后才能获得超过3或4个字符。
答案 5 :(得分:-1)
我知道这个答案已经晚了,但最简单的解决办法是生成随机数并确定它是唯一的100%是
$(document).ready(function) {
$('#example').DataTAble ( {
"ajax": {
"url": "/data",
}} ); });