0

我正在寻找一个 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 位。

4

3 回答 3

1

如手册中所述,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 . "'");
}
于 2013-07-20T19:36:07.677 回答
0

mt_rand()应该是相当不错的(或者使用原生php函数返回随机数的最佳方式),所以对它有一些信心。此外,如果您只想要 10 位数字,请尝试:

$random_number = mt_rand(1000000000, 9999999999);
于 2013-07-20T19:27:26.640 回答
0

这是一个生成密码的简单函数

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

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

于 2016-06-19T07:01:27.223 回答