我正在我的数据库中构建一个“代理 ID”列表,满足以下要求:
- ID 长度必须为 9 位(仅限数字)
- ID 中的相同数字不得超过 3 个。
- ID 不能包含超过 2 个连续的相同数字(即 887766551;不能有 888..)
到目前为止,我已经完成了第 1 部分,但在上面的第 2 部分和第 3 部分中遇到了困难。我的代码如下。
function createRandomAGTNO() {
srand ((double) microtime( )*1000000);
$random_agtno = rand(100000000,900000000);
return $random_agtno;
}
// Usage
$NEWAGTNO = createRandomAGTNO();
有任何想法吗?
- Do not除非您想彻底破坏随机数的安全性,否则每次调用都会重新设置 RNG 种子。
- 除非您的 PHP 非常旧,否则您可能根本不需要重新播种 RNG,因为 PHP 在启动时为您播种,并且极少数情况下您需要用您自己选择的种子替换种子。
- 如果您可以使用,请使用
mt_rand
代替rand
。我的例子将使用mt_rand
.
至于其余的 - 你可能会想出一个非常巧妙的将数字从线性范围映射到你想要的形式的数字,但让我们用暴力来代替。这是其中之一,是的,运行时间的理论上上限是无限的,但是expected运行时间是有限的并且相当小,所以不必太担心。
function createRandomAGTNO() {
do {
$agt_no = mt_rand(100000000,900000000);
$valid = true;
if (preg_match('/(\d)\1\1/', $agt_no))
$valid = false; // Same digit three times consecutively
elseif (preg_match('/(\d).*?\1.*?\1.*?\1/', $agt_no))
$valid = false; // Same digit four times in string
} while ($valid === false);
return $agt_no;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)