我制作了一个字符串生成器:
<?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个值。
有没有一种好方法可以确保生成的字符串不重复?
谢谢:)
答案 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)
有几个选择:
虽然您的代码表明它们被用作密码;如果确实如此,那么就不必担心重复,因为没有明显的候选人可能更有可能(例如password
或qwerty123
)。
答案 2 :(得分:0)
创建一个查找/检查表(在数据库或文件中)或制作一个算法,使其成为更好的唯一键(使用md5或sha或设计为唯一的东西)。