PHP中的随机ID /数字生成器

JM4*_*JM4 0 php random

我正在我的数据库中构建一个"代理ID"列表,其中包含以下要求:

  1. ID必须是9位数字(仅限数字)
  2. ID可能不包含多于3个相同的数字.
  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();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

hob*_*bbs 7

  1. 不要重新播种的RNG像每一个电话,除非你想完全吹你的随机数的安全性.
  2. 除非您的PHP非常老,否则您可能根本不需要重新种植RNG,因为PHP会在启动时为您播种,并且很少需要您自己选择替换种子.
  3. 如果它可供您使用,请使用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)