【问题标题】:Generating E-pin or random Unique Number in PHP MYsql在 PHP MYsql 中生成 E-pin 或随机唯一编号
【发布时间】:2013-07-19 21:12:56
【问题描述】:

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

【问题讨论】:

    标签: php mysql pdo


    【解决方案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 . "'");
    }
    

    【讨论】:

      【解决方案2】:

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

      $random_number = mt_rand(1000000000, 9999999999);
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-05-21
          • 1970-01-01
          • 1970-01-01
          • 2017-09-28
          • 1970-01-01
          • 1970-01-01
          • 2011-06-14
          • 2014-05-26
          • 1970-01-01
          相关资源
          最近更新 更多