如何在 laravel 中为每个用户生成唯一的随机值并将其添加到数据库中

2022-08-30 18:41:48

我正在开发一个活动组织网站。在这里,当用户注册一个事件时,他将获得一个唯一的随机数(10位),我们用它来生成条形码并将其邮寄给他。现在

  1. 我想使每个注册事件的编号唯一。
  2. 而且也是随机的

一种解决方案是获取数组中的所有随机数,并使用Php rand(1000000000,9999999999)生成一个随机数,然后遍历并检查所有值。获取不等于数组中任何值的第一个值,并将其添加到数据库中。

但我认为可能有更好的解决方案。有什么建议吗?


答案 1

您可以使用php的uniqid()函数根据微时间(当前时间以微秒为单位)生成唯一的ID。

例:

<?php
echo uniqid();
?>

输出:

56c3096338cdb

答案 2

您的逻辑在技术上没有缺陷。但是,如果您的应用程序吸引了大量用户,那么在资源和计算时间方面,获取所有随机数可能会变得不必要的昂贵。

我建议使用另一种方法,生成一个随机数,然后根据数据库进行检查。

function generateBarcodeNumber() {
    $number = mt_rand(1000000000, 9999999999); // better than rand()

    // call the same function if the barcode exists already
    if (barcodeNumberExists($number)) {
        return generateBarcodeNumber();
    }

    // otherwise, it's valid and can be used
    return $number;
}

function barcodeNumberExists($number) {
    // query the database and return a boolean
    // for instance, it might look like this in Laravel
    return User::whereBarcodeNumber($number)->exists();
}

推荐