Php 如何使随机字符串生成器过滤掉重复的字符串?
我制作了一个字符串生成器:Php 如何使随机字符串生成器过滤掉重复的字符串?,php,string,random,generator,Php,String,Random,Generator,我制作了一个字符串生成器: <?php function createRandomPassword() { $chars = "abcdefghijkmnopqrstuvwxyz023456789"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; while ($i <= 12) { $num = rand() % 33; $tmp =
<?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();
?>
我的问题是,我认为这可能会复制值,这一点非常重要,因为我将生成大约700000个值
有没有一种好方法可以确保生成的字符串不重复
谢谢:)几个选项:
虽然您的代码表明它们被用作密码;如果它们确实存在,那么就不用担心重复项,因为没有明显的更可能的候选项(例如,
password
或qwerty123
)。以下示例将生成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);
}
$cnt=0;
$product_NAME=array();
而($cnt<100){
对于($i=0;$i<100-$cnt;$i++)
$product_NAME[]=“代码-”.createRandomPassword();
$product\U NAME=数组\U unique($product\U NAME);
$cnt=计数($product\U名称);
}
您可以将数字100放入变量或常量中,并与700000进行交换 创建一个查找/检查表(在数据库或文件中)或生成一个算法来生成更好的唯一密钥(使用md5或sha或设计为唯一的东西)。为什么要这么麻烦呢?只需使用sha1()或md5()。同样,您也不会在循环的每次迭代中重新为PRNG设定种子。您只需对其进行一次种子设定,php会在您第一次调用rand()时自动为您执行此操作。实际上,如果你在测试并且每次都想要相同的“随机”流,你只需要手动种子。这里有些吹毛求疵:SHA1和MD5不是设计为无碰撞的,但是有非常非常低的碰撞概率(这意味着它们在实践中应该是无碰撞的)。@chiborg:理解,并受到好评,然而,根据OP的帖子,与使用rand()和固定字符串相比,任何有[甚至]1%碰撞概率的东西都是一个巨大的改进。