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

时间:2013-07-20 18:42:06

标签: php mysql pdo

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

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

此处的代码是生成随机引脚并存储在数据库表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);

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

3 个答案:

答案 0 :(得分:1)

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 . "'");
}

答案 1 :(得分:0)

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

$random_number = mt_rand(1000000000, 9999999999);

答案 2 :(得分:0)

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

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

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