我正在我的数据库中构建一个"代理ID"列表,其中包含以下要求:
到目前为止,我已经完成了第1部分,但我正在努力争取上面的2和3.我的代码如下.
function createRandomAGTNO() {
srand ((double) microtime( )*1000000);
$random_agtno = rand(100000000,900000000);
return $random_agtno;
}
// Usage
$NEWAGTNO = createRandomAGTNO();
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
mt_rand
而不是rand
.我的例子将使用mt_rand
.至于其余部分 - 你可能会想出一个非常巧妙的数字从线性范围映射到你想要的形式的数字,但让我们蛮力强迫它.这是其中的一个,是的,运行时间的理论上限是无限的,但预期的运行时间是有限的,非常小,所以不要太担心.
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;
}
Run Code Online (Sandbox Code Playgroud)