如何生成唯一代码

时间:2011-03-15 03:15:37

标签: javascript mysql database

我连接到我的数据库,用户提交他们的电子邮件地址。这存储在DB中。这是我从一个turorial抓住的东西。

我想在文档加载时通过JS生成用户唯一代码。 格式长度应为6位,仅使用A-Z和0-9。即:F4DRB6

完成后,我需要在DB中存储该用户的唯一代码 生成器应检查数据库中是否存在唯一代码,以确保它实际上是唯一的。

我遇到的麻烦是;我不知道如何以上述格式创建唯一代码,检查它是否是DB中唯一的,然后将其存储在与该用户对应的DB中。我假设另一列以某种方式匹配该行?

谢谢!

编辑:我试过这个..如果有任何错误请指出。感谢

function genRandomString() {
    $length = 5;
    $characters = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $string = '';    

    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
    return $string;
}

do {
  $random_string = $this->genRandomString();
} while (mysql_num_rows(mysql_query("SELECT referralcode FROM ".coming_soon_emails." WHERE rand_string='{$random_string}'")));
$q = "INSERT INTO ".coming_soon_emails." SET referralcode='{$random_string}'";
$result = mysql_query($q);

3 个答案:

答案 0 :(得分:2)

为什么需要在客户端创建?为什么不能在客户提交“最终”表单时创建代码?

您可以创建此代码randomly,并将处理代码的列设置为unique。如果您收到违规错误,请生成另一个错误,然后重试。

嗯,这是其中一种方法......

答案 1 :(得分:0)

简单的数学, 6 ^ 36足够大,创建随机ID大多是唯一的。

如果您想100%确定使用AJAX检查数据库中生成的ID并重新创建,如果存在。

答案 2 :(得分:0)

通过一种因果关系,简单的演练将是:

在mysql中写一个 function / SP

首先,生成随机代码,正如AbiusX所说,取决于您的用户池大小,新代码可能很少使用。

这将为您生成一个十六进制字符,并且应该让您入门。

  

SELECT conv(FLOOR((RAND()* 16)),10,16);

然后您需要检查此代码是否已被使用。 `

  

SELECT * FROM usertable where code =   generatedcode

如果是,请生成一个新的。

在一个更健壮的设置中,我总是预先生成唯一代码,并将它们存储在“未使用的代码”等表中,这样我就可以抓住任何代码并确保它是唯一的并且不使用。