您好,我正在创建一个处理 ID 和 UID 的系统,我们随机生成 UID,但我有点卡住了,我需要始终生成数据库中当前不存在的 UID,因为该字段是使用的唯一字段以免暴露真实身份。

所以回顾一下,我试图生成一个当前不存在于数据库中的唯一ID,我没有工作的部分是数据库中的交叉检查,所以有时它会给出数据库中已经存在的数字,即使它不应该提前感谢。

到目前为止,这是我的代码:

function uniqueID($table) 
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');

$totalRows = $result->num_rows;

if(!$result)
{

    return $db->error;

}
else
{

    if($totalRows > 0)
    {

        return uniqueID($table);

    }
    else
    {

        return $code;

    }

}

}
有帮助吗?

解决方案 6

我想出了问题已经是什么,正如我向大家所述代码的那样不是问题!问题是交叉检查没有正常工作。所以我所做的就是删除了这个循环

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}
.

因为这导致我的唯一身份证结束了错误。

其他提示

要生成Unic UID,您可以使用时间,我认为这是一个非常小的Chanse,记录将在同一个第二个中添加,有两个随机数据。

写一些函数,将它返回给您,如此

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}
.

PHP中有一个函数叫做 uniqid()

http://php.net/manual/en/function.uniqid.php

我可以谈论生成ID,就像其他人一样,但这不是你的问题。 你的查询似乎很好。如果它返回0行,但似乎在数据库中找到代码,那么很可能它只看起来相同,但实际上不是。它可以用空格填充。

解决此方法是通过选择用户数据库的最后一行,并将脚本检查为ID字段(通过在后代模式下执行id执行SELECT订购),您可以使用该信息对于随机化数字大于该ID。

编辑

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');

$already_in_database = array();
while ($row = mysql_fetch_array($result)){
    $already_in_database[] = $row['UID'];    
}

$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
    $new = rand(0,$some_max_value);
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top