如何使随机字符串生成器过滤掉重复的字符串?

时间:2012-02-27 14:42:11

标签: php string random generator

我制作了一个字符串生成器:

    <?php

function createRandomPassword() {
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 12) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}


// Usage
$product_names = array ();
for ($i=0; $i < 100; $i++ )
$product_names[] = "code-" . createRandomPassword();
?>

我的问题是,我认为这有可能会重复这些值,而且非常重要,因为我将生成大约700,000个值。

有没有一种好方法可以确保生成的字符串不重复?

谢谢:)

3 个答案:

答案 0 :(得分:1)

以下示例将生成100个产品名称,删除重复项并生成新的产品名称,直到产品名称数组的计数为100.

$cnt = 0;
$product_names = array ();
while($cnt < 100) {
   for ($i=0; $i < 100 - $cnt; $i++ )
     $product_names[] = "code-" . createRandomPassword();
   $product_names = array_unique($product_names);
   $cnt = count($product_names);
}

您可以将数字100放入变量或常量,并将其与700,000交换。

答案 1 :(得分:0)

有几个选择:

  1. 生成700000个唯一字符串并将其随机播放。
  2. 使用GUIDs
  3. 虽然您的代码表明它们被用作密码;如果确实如此,那么就不必担心重复,因为没有明显的候选人可能更有可能(例如passwordqwerty123)。

答案 2 :(得分:0)

创建一个查找/检查表(在数据库或文件中)或制作一个算法,使其成为更好的唯一键(使用md5或sha或设计为唯一的东西)。