我想在我的软件中生成配置文件ID。 mt_rand
函数运行良好,但我需要将id固定为10位数。目前我正在循环mt_rand
输出,直到我得到一个10位数字。但我现在面临的问题是,大多数配置文件ID从1开始,有些从2开始。无任何其他单个数字。我理解这是因为mt_rand
的范围,并且它不能产生以3或更多开头的10位数字。
这就是我目前正在做的事情
for($i = 0; $i < 200; $i++){
$num = mt_rand();
if(strlen($num) == 10) echo $num."<br>";
}
如果你运行上面的代码,你会看到所有数字都从1或2开始。有什么方法可以解决这个问题吗?
编辑:我想我可以翻转数字,但有些数字以零结尾,这看起来有点像黑客。但话说回来,随机数生成本身就是一个黑客攻击。
答案 0 :(得分:1)
只需在1000000001处启动您的ID,然后在1000000002处启用ID 2,在1000000543处启动ID 543,依此类推?
或者,继续调用mt_rand(1000000001,min((PHP_INT_SIZE&gt; 4?intval(&#34; 9999999999&#34;,10):PHP_INT_MAX),mt_getrandmax()))直到你得到一个尚不存在的ID在你的数据库? (随着你的数据库变得越来越大,这将会越来越多cpu intesive ...当它几乎已满时,如果花费数十亿次迭代和几分钟,我不会感到惊讶。)
答案 1 :(得分:0)
要详细说明Rizier的建议,确保任何字符串(甚至是一串数字)的唯一方法是适合长度和规则的给定模具,一次生成一个字符,然后将它们组合在一起
$str = '';
for($loop = 0; $loop < 10; $loop++) {
$str .= mt_rand(0,9);
}
echo $str;
然后,您可以为此添加规则。也许您不想要前导0,因此您可以为此添加规则。也许你也想要字母。这将始终为您提供包含所需规则的随机字符串。
中查看此操作