如何在 php 中忽略或停止重复随机数


How to Ignore or Stop Repeating of Random Numbers in php

我有一个表格。

当客户提交表格时,我将向他的电子邮件和我们的网站发送发票 email(info@example.com)。

当客户提交表格时,我正在为每张发票生成一个随机数。发票编号看起来像 #502689

因此,我正在使用像 rand(99,999999) 这样的 Php 随机函数。我不想再重复这个随机数了。

两天前,我得到了一个像#125459这样的发票编号,两天后,当另一个客户提交表格时,我再次得到了发票编号#125459

那么我怎么能忽略这个随机数的重复。请帮助我。

  1. 最好的方法是使用增量 ID。例如,如果您使用 mysql,则可以将其设置为 main(如果它是 int 自动增量)。因此,当您创建新发票时,它将生成下一个id =>没有重复项。

  2. 如果您想使用随机 ID,则必须不断重新生成发票编号,直到不使用当前发票编号。为此,您可以使用如下代码:

    do {
        $invoice_id = rand(99, 99999);
        if(invoice number already exists) { //Use your code here to check if number is unique.
            $ok = false; //Invoice number is used. try again a new number
        } else {
            $ok = true; //Invoice number is not used
        }
    } while(!$ok)
    
  3. 如果您生成的发票不超过 1 张/秒,您可以使用 time() 作为 id(以秒为单位的 unix时间戳)。但是,如果您在同一秒内生成 2 张发票,这将对您无济于事。

  4. 如果你不想成为数字,你可以使用 php 的 uniqid() 方法。

您始终必须检查现有的发票编号,这也是@daniel-dudas的解决方案所暗示的。我也会推荐自动增量数据库解决方案。

顺便说一句,您应该进一步考虑,在某些国家/地区,法律迫使您提供不断增加的发票编号,而不是随机的。