auto generate 的id 要怎样做?

edited 十月 2013 in PHP新手區
我要做的是这样的!
id的format是这样 D[YYMM]-0001 比如是 D0908—0001

D是定的,Y是年,M是月...

当到下一个月是会从0001从新开始!要怎样做呢?
php 高手们帮帮忙!

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4381

評論

  • edited 八月 2009
    把目前序號與年月寫入檔案,每次產生時判斷,如果年月一樣就把序號加 1 ,如果年月不一樣就把續號改為 1 ,然後透過 str_pad ( http://tw.php.net/manual/en/function.str-pad.php ) 補序號左邊的 0
  • 280280
    edited 八月 2009
    還真是方便的函數,第一次看到
    直至目前為止,我處理流水號的做法還是,當字串處

    $aa="1".substr($id,-4);
    $aa++;
    $num="U".strval(substr($aa,-4));

    先取出流水號前面隨變加個數字
    然後 + 1
    然後強制轉換成字串輸出

    這樣前面的 0 就不會不見

    不過看起來還是 kiang 大貼的函數實用!!
    你參考看看
  • edited 八月 2009
    kiang的做法我不清楚哩!可以给点example吗?
  • edited 八月 2009
    你那id的資料會記錄在?資料庫?假設是
    那你要先去查出來有沒有當月再下判斷
    str_pad($num, 11, "D0", STR_PAD_LEFT);
    
  • edited 八月 2009
    用kiang的方法實做...
    <?php
    final class GID
    {
            private $cfile = "";
            private $cym   = "";
            public function __construct ()
            {
                    $this->cfile = date("ym"); // 檔案,看你要放哪個位置自己喬一下
                    $this->cym   = "D".date("ym")."-"; // 你的前置格式
            }
            public function generateID ()
            {
                    if (file_exists($this->cfile)) {
                            $fp = fopen($this->cfile, "r");
                            $id = intval(fread($fp, filesize($this->cfile)));
                            fclose($fp);
                    }
                    $id ++;
                    $fp = fopen($this->cfile, "w");
                    flock($fp, LOCK_EX);
                    fputs($fp, $id);
                    flock($fp, LOCK_UN);
                    fclose($fp);
    
                    return $this->cym . sprintf("%04d", $id);
            }
    }
    
    $GID = new GID();
    echo $GID->generateID();
    ?>
    
  • edited 八月 2009
    我已经做到了!!谢谢各位的帮忙
Sign In or Register to comment.