gpt4 book ai didi

php函数生成随机字符串,连续返回重复值

转载 作者:行者123 更新时间:2023-11-29 13:13:53 28 4
gpt4 key购买 nike

我编写了一个函数来生成 7 个字母数字字符的随机字符串,然后将其插入到 mysql 数据库中。

这是代码:

function getRandomID(){
$tmp ="";
$characters=array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1","2","3","4","5","6","7","8","9");
for($i=0;$i<7;$i++)
$tmp.=$characters[rand(0,count($characters)-1)];
return $tmp;
}

我不会检查重复的 atm,因为我预计数据库中的条目不会超过 1000 个,并且我计算出此函数可以返回 (35)^7 = 64,339,296,875 个可能的值。

我正在本地以及实时服务器上对其进行测试。

问题就在最后一个小时,这个函数生成了两次重复值。

我在数据库中发现了 3 个条目,它们都具有相同的随机字符串。

我不知道是什么原因导致了这个问题,因为我后来尝试了很多次,但问题无法重现。

有人知道这里会发生什么吗?

提前非常感谢

最佳答案

以“嗯,这不会发生”的心态设计代码是一个非常危险的游戏,只需正确执行一次,这样您就不必多次返回代码来快速修复小问题像这些。

进行重复检查,你就会变得可靠。

您可以创建一个类似的函数

function stringExists($string)
{
...
return $boolValue;
}

您可以轻松创建一个 while 循环,在生成旧字符串的同时生成新字符串。

$duplicate = true;
while($duplicate)
{
$newString = getRandomId();
$duplicate = !stringExists($string);
}
// Work with the newest string that is not a duplicate.

如果你真的想加入

然后您可以查看 documentation如果您想找出可能导致问题的原因,请使用 rand。此外,如果我们不知道总共有多少个条目,那么 3 个条目就没有任何意义。另外,有时“随机”函数并不像人们想象的那么随机,有时某些编程语言中的随机函数总是可用的,但在它们变得“真正”随机之前需要某种启动。

插入的时间也可能是问题的一部分,互联网上有很多线程,例如 this stackoverflow 上的一个,其中有一些有趣的点可以影响你的“随机”性。

无论这是真的还是假的,无论评论中是否指出,您都可以肯定在相关线程和主题中找到您的问题的答案。

简短回答:不要考虑并进行重复检查,这很容易。

请注意,当然,您应该首先将您的 ID 设置为数据库中的唯一约束。

关于php函数生成随机字符串,连续返回重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737636/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com