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

时间:2016-03-21 13:44:59

标签: javascript php

我有一张表格。

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

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

因此,我正在使用像兰德一样的随机函数(99,999999)。我不想再次重复这个随机数。

两天前,我收到了#125459的发票号码,两天后,当另一位客户提交表格时,我再次将发票号码设为#125459

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

2 个答案:

答案 0 :(得分:0)

  1. 使用增量ID的最佳方法。例如,如果你使用mysql,你可以设置为主键,如果它是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(以秒为单位的unixtimestamp)。但如果你在同一秒内生成2张发票,这对你没有帮助。

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

答案 1 :(得分:0)

您必须检查现有的发票号码,以及@ daniel-dudas'解决方案也意味着我也建议使用自动增量数据库解决方案。

不过,您还应该考虑到,在某些国家/地区,法律强制要求发票号码不断增加,而不是随机增加。