【问题标题】:Generate 11 digit serial numbers in codeigniter在codeigniter中生成11位序列号
【发布时间】:2018-08-03 07:22:21
【问题描述】:

这是我生成序列号的模型函数

public function getmax($field_name,$table_name){

        $this->db->select_max($field_name);
        $res1 = $this->db->get($table_name);
        if ($res1->num_rows() > 0) {
            $res2 = $res1->result_array();                  
        }
        $max = $res2[0][$field_name];
        if($max == NULL) return 1; else return $max+1;
    }   

这是我的控制器功能

$CardNo = $this->general_model->getmax('card_number','digicardusers');

我想设置从00000000001开始的序列号。如何更改代码以获得11位序列号。请帮助

【问题讨论】:

  • $randnum = rand(1111111111,9999999999);
  • 在这段代码中我可以在哪里使用它
  • @suresh serial != random
  • 你能给我举个例子你想如何生成吗?
  • 从 00000000001@suresh 开始的数字

标签: php codeigniter model


【解决方案1】:

假设您只是在寻找 0'padding,请使用 sprintf()

<?php
for ($i = 1; $i < 25; $i++) {
    echo sprintf("%'.011d", $i).PHP_EOL;
}

https://3v4l.org/UanaJ

00000000001
00000000002
00000000003
00000000004
00000000005
00000000006
00000000007
00000000008
00000000009
00000000010
00000000011
...

【讨论】:

  • 在哪里可以使用
  • 函数返回后,$CardNo = sprintf("%'.011d", $CardNo);
  • 注意:你应该只将它用于显示,如果你尝试处理该值或它被强制转换,就会发生奇怪的事情:3v4l.org/CXdD9
【解决方案2】:

你可以使用这个函数,只需传递参数 $digit

function randomXDigit($digits = 11) {
    return str_pad(rand(0, pow(10, $digits)-1), $digits, '0', STR_PAD_LEFT);
}

【讨论】: