随机字符串重复?

时间:2011-05-21 01:36:39

标签: php mysql uniqueidentifier base-conversion

我在互联网上有一项服务,人们发布图片并生成一个短字符串。只有一个可以使用。但是,我在数据库中遇到重复,我看到了重大问题。

以下是我正在使用的内容:

$id=rand(10000,99999);
$short_string = base_convert($id,20,36);

解决问题的最佳方法是什么?从数据库检查并保持循环直到它不匹配?如果每个可能的解决方案都进入无限循环会怎么样?

5 个答案:

答案 0 :(得分:1)

将PK放入一个算法,该算法从中生成一个唯一的数字并将其放入您的函数中。

答案 1 :(得分:1)

最好的办法是在写入包含该数字的新图像之前,先使用随机数生成器对图像列表确保图像不存在。

尝试使用使用数字,字母的算法来增加字符的数量和类型,以便增加您可以拥有的组合。

答案 2 :(得分:1)

将最后一个值增加一个随机数,而不是使用随机值。像这样:

$results = mysql_query("SELECT * FROM thetable ORDER BY theId DESC LIMIT 1");
$keyToUse = 1;
if($row = mysql_fetch_array($results)) {
    $keyToUse = (int)$row['theId'] + rand(1, 100);
}

然后将整数键转换为任何格式,例如使用base_convert

答案 3 :(得分:1)

您是否尝试使用mt_rand() http://www.php.net/manual/en/function.mt-rand.php。你也应该增加范围。

答案 4 :(得分:0)

使用md5 http://php.net/manual/en/function.md5.php 产生的字符串没有冲突(概率很大)。