php - 在 PHP MYsql 中生成 E-pin 或随机唯一编号

标签 php mysql pdo

我正在寻找一个 php 脚本,它可以为我的项目生成一个唯一的 10 位数字(数字)。

我对Php知之甚少,这是我的代码,请帮忙。

此处的代码是生成随机 pin 并存储在数据库表 lucky_coupon_pins 中。

<小时/>

//检查生成按钮

    if (isset($_POST['generate_pin'])) {

//生成随机数

    $random_number=mt_rand();

//生成代码后检查它是否存在于表中,如果存在则再次生成,否则继续

$row_count = $db->row_count("SELECT * FROM " . config_item('cart', 'table_lucky_coupon_pins') . " WHERE lucky_pin = '" . $random_number . "'");

if($row_count>0)

{
$random_number=mt_rand();
$row_count = $db->row_count("SELECT * FROM " . config_item('cart', 'table_lucky_coupon_pins') . " WHERE lucky_pin = '" . $random_number . "'");
}

//插入数据库

$values = array(
                'lucky_pin'         => $random_number,
                'lucky_pin_value' => $_POST['lucky_pin_value']

            );      

            $db->insert(config_item('cart', 'table_lucky_coupon_pins'), $values);
<小时/>

在这里,我检查生成的 pin 一次,如果它已经存在,则会生成另一个 pin。我不知道这个唯一性有多远,而且生成的 pin 有时是 9 位数字,有时是 10 位数字。

最佳答案

manual 中所述mt_rand() 采用两个参数,一个最小值和一个最大值,因此要获取 10 位随机值,请使用:

$random_number = mt_rand(1000000000, 9999999999);

$random_number = mt_rand(1,9);
for ($i = 0; $i < 9; $i++) {
    $random_number .= mt_rand(0,9)
}

它是独一无二的吗?事实上,这种可能性很大,但也不确定。 (如果它已经存在,您只需检查一次。)您可以考虑使用循环,例如

$row_count = 1;
while ($row_count > 0) {
    $random_number = mt_rand(1000000000, 9999999999); // i prefer the other option but this one is somehow shorter
    $row_count = $db->row_count("SELECT * FROM " . config_item('cart', 'table_lucky_coupon_pins') . " WHERE lucky_pin = '" . $random_number . "'");
}

关于php - 在 PHP MYsql 中生成 E-pin 或随机唯一编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765484/

相关文章:

php - Google Drive 存储图像 - 好方法还是坏方法

php - 如何在php中对数据库模型进行json编码?

php - PDF 可下载 PHP

mysql - 从 case 语句中选择值列表

php - 连接到 SQL Server.PDOException 对象时出错 (Azure)

mysql - Sqlite3 vs Postgres vs Mysql - Rails

mysql - WAMP卸载后恢复数据库

php - 获取两个日期之间一定时间内的记录

php - PDO 插入不工作

php - 真正准备好时会默默失败,模仿时会有效