【问题标题】:PHP function to generate Unique n digits random numbersPHP函数生成唯一的n位随机数
【发布时间】:2015-05-22 13:31:41
【问题描述】:

我需要一个 php 函数来创建唯一的 n 位随机数;这是我尝试过的

//Function to generate random code
 function getUniqueCode($length)
 {
   for($i=0;$i<$length;$i++){
   if($i==0)
    $code = str_pad(mt_rand(1, 9), 1, '0', STR_PAD_LEFT);
   else
    $code .=    str_pad(mt_rand(0, 9), 1, '0', STR_PAD_LEFT);
   }
   return $code;
 }

如果我使用此函数生成 9 位数字,例如。 129534546,是否有可能生成不唯一的数字,如果是,我应该改变什么,以便我可以确定重复数字的可能性为零

【问题讨论】:

  • 如果不检查之前生成的所有数字,您永远无法 100% 确定某个数字不会重复。
  • 在你的标题中说:生成唯一的数字,现在你问如何创建非唯一的数字?
  • 我认为 php rand 函数是您的解决方案。不是吗?
  • Rizier123 问题不是要创建重复的数字,而是要避免获得它们的机会。

标签: php


【解决方案1】:

总有可能,无论是更小还是更大。

如果您将它们保存在数据库或其他东西中,您可以检查以前存储的数字。

第二种选择是,将随机数附加到名为 numbers.txt 的文件中,由 , 分隔,并在生成新数字时检查文件中是否匹配,如果匹配,则生成另一个数字。

【讨论】:

  • 非常感谢您的快速回复,我考虑过但担心处理速度,想想我想生成600,000个数字的情况
  • 如果它是一次性任务很好,否则你需要在你的生成器函数中包含像a-z 这样的字符,以尽量减少重复的可能性,如果你不检查生成器函数中的重复项。
【解决方案2】:

你总是有机会得到重复的号码,不确定什么时候,但它可能,所以把代码改成这样:

function getUniqueCode($length)
{
   for($i=0;$i<$length;$i++){
   if($i==0)
      $code = str_pad(mt_rand(1, 9), 1, '0', STR_PAD_LEFT);
   else
      $code .=    str_pad(mt_rand(0, 9), 1, '0', STR_PAD_LEFT);
    }
    return $code;
 }


 $tempArray = array();  


 $tempCode = getUniqueCode(9); //here 9 is number digit you want randon number you want

 if (!in_array($tempCode, $tempArray)) {
     $tempArray[] = $tempCode;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多