使用php为mysql数据库生成随机id

时间:2011-03-31 18:03:30

标签: php mysql

我一直在高低搜索,但无济于事。

我正在尝试在9999,99999999之间为我的用户插入随机ID号。问题是它们必须是独一无二的。我已经设置了所有内容但是为id设置了自动增量。我想我会保留自动增量字段,只为唯一ID添加另一行。

这是我到目前为止所得到的:

$id = mt_rand(9999,99999999);

    $query = "SELECT * FROM accounts";

    $result = mysql_query($query) or die(mysql_error());

    while($account = mysql_fetch_array($result)){

        if ($id == $account['id']){

    $id = mt_rand(9999,99999999);

    } else {

    $sql = "INSERT INTO accounts (id, username, email, password, sex)
    VALUES ('$id', '$username', '$email', '$password', '$sex')";
    mysql_query($sql);}}

现在我想如果我创建一个随机数,检查数据库是否存在创建另一个,否则插入它,但它不起作用,如果它是一个简单的解决方案我道歉。

再次感谢:)

4 个答案:

答案 0 :(得分:3)

这似乎是一个愚蠢的答案:

如果您已在唯一键上使用auto_increment,则无需添加另一个唯一键

答案 1 :(得分:1)

接下来的代码几乎100%肯定你永远不会重复,我用自己,永远不会有任何问题。

 function guid(){
    if (function_exists('com_create_guid')){
        return com_create_guid();
    }else{
        mt_srand((double)microtime()*10000);
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $hyphen = chr(45);  // "-"
        $uuid = chr(123)    // "{"
                .substr($charid, 0, 8).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,20,12)
                .chr(125);  // "}"
        return $uuid;
    }
 }

如果您认为这还不够,请尝试在数字之前创建前缀,它可以是年date('Y');

祝你好运

答案 2 :(得分:1)

虽然不是“强大的”PRNG(实际上非常弱),但一种方法是使用one-to-one random mapping中描述的PRNG。 此特定解决方案显示了PRNG解决方案,其周期长度 范围。但是,此解决方案不能“按原样”使用,因为域名不同。

请参阅Random-Order Keys - 间接来自上面的链接 - 以及以下使用附加同余方法/线性反馈移位寄存器PRNG的部分。这是a table showing the tap positions - 使用2 ^ 23将允许在[9999,9999 + 2 ^ 23-1]或[9999,8398606]之间选择保证唯一号码。但是,应考虑其他交易因素,例如“选择ID但不使用它”。

显然这不应该用于 true “security”(即使是“真随机随机”,一个nonce - 它不需要唯一约束! - 和/或其他验证系统应该被雇用,随机ID只是一个“默默无闻” - 这些不是安全! - 层。)

快乐的编码。

答案 3 :(得分:0)

你可以生成一个uid,然后检查它是否被使用。

<?php
  do {
    $uid = rand(9999,99999999);
    $sql = "SELECT * FROM `table` WHERE `uid`=$uid";
    $result = mysql_query($sql);
  while (mysql_num_rows($result) > 0);
    // have $uid

?>

或者因为你有uid,那么你可以在其上运行一个方程来生成一个uid(比如md5或sha256哈希或其他东西)。