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

Javascript 如何在php中忽略或停止重复随机数,javascript,php,Javascript,Php,我有一张表格 当客户提交表格时,我会向他的电子邮件和我们的网站电子邮件发送发票(info@example.com). 当客户提交表单时,我会为每张发票生成一个随机数。发票编号类似于#502689 因此,我使用了Php随机函数,如rand(9999999)。我不想再重复这个随机数了 两天前,我得到了一个类似于#125459的发票号,两天后,当另一位客户提交表单时,我再次得到了发票号#125459 那么我怎么能忽略这个随机数的重复呢。请帮帮我 最好的方法是使用增量id。例如,如果您使用mysql,

我有一张表格

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

当客户提交表单时,我会为每张发票生成一个随机数。发票编号类似于
#502689

因此,我使用了Php随机函数,如rand(9999999)。我不想再重复这个随机数了

两天前,我得到了一个类似于#125459的发票号,两天后,当另一位客户提交表单时,我再次得到了发票号
#125459

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

  • 最好的方法是使用增量id。例如,如果您使用mysql,您可以将其设置为主键(如果int为autoincrement)。因此,每次创建新发票时,它都会生成下一个id=>无重复项

  • 如果您想使用随机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)
    
  • 如果每秒生成的发票数不超过1张,则可以使用time()作为id(UnixtTimeStamp,以秒为单位)。但如果您在同一秒钟内生成2张发票,这将对您没有帮助

  • 如果您不想数字化,可以使用php的()方法


  • 您必须始终对照现有的发票号进行检查,@daniel dudas的解决方案也暗示了这一点。我还推荐自动增量数据库解决方案


    BTW,你还应该考虑到,在一些国家,你被法律强制要求发票号码不断增加,而不是随机的。p> 创建发票的方式真奇怪。您需要将发票号码保存在数据库中,并检查它们是否存在。请使用guid,而不是随机数字。如果发票编号不是发票数据库ID,那么为什么不使用递增编号呢?GUID没有帮助,因为发票号码需要是人类可读的。以#10000这样的数字开始,每个发票增加1,这样它们都是唯一的,可读性强,并且与发票数据库ID不同,我认为发票数据库ID从0开始。正如@KallumTanton所说:将发票编号保存在一个数据库中,从更高的数字开始。此外,请确保它只存在一次=>您的DB列必须是唯一的。@Mahmood Mohammed可能是您应该使用与日期和时间相关的函数
    mktime()
    ,因此重复的机会非常少