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


Generating E-pin or random Unique Number in PHP MYsql

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

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

这里的代码是生成一个Random pin并存储在数据库表lucky_coupon_ps中。


//检查生成按钮

    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);

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

如手册中所述,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 . "'");
}

mt_rand()应该很好(或者是使用原生php函数返回随机数的最佳方式),所以要相信它。此外,如果你只想要10位数,请尝试:

$random_number = mt_rand(1000000000, 9999999999);

这里有一个生成引脚代码的简单函数

function GeneratePinCode($chars){
    $pin="";
    while ($chars!=0){
        $pin .=rand(0,9);
        $chars--;
    }
    return $pin;
}

至于pin代码的唯一性,您可以将生成的每个pin存储在数据库中,并在每次生成新pin时运行检查。