生成的格式是:200908010001 前面幾位為當前的日期,後面五位為系統自增長類型的編號原理:
1.獲取當前日期格式化值
2.讀取文件,上次編號的值+1最為當前此次編號的值(記錄以文件的形式存儲,下月會接著這個編號)
<?php class FileEveryDaySerialNumber { private $filename; //檔名 private $separate; //系統分隔符號 private $width; //自動增長部分的個數 public function __construct($width, $filename, $separate) { $this->width = $width; $this->filename = $filename; $this->separate = $separate; } public function getOrUpdateNumber($current, $start) { $record = IOUtil::read_content($this->filename); $arr = explode($this->separate, $record); if($current == $arr[0]) { //如果是同一天,則繼續增長 $arr[1]++; IOUtil::write_content("$arr[0],$arr[1]", $this->filename); //將新值存入文件中 return "$arr[0]".str_pad($arr[1],$this->width,0,STR_PAD_LEFT); } else { //如果兩個日期不一樣則重新從起始值開始 $arr[0] = $current; $arr[1] = $start; IOUtil::write_content("$arr[0],$arr[1]", $this->filename); //將新值存入文件中 return "$arr[0]".str_pad($arr[1],$this->width,0,STR_PAD_LEFT); } } } class IOUtil { public static function read_content($filename) { $handle = fopen($filename,"r"); $content = fread($handle,filesize($filename)); return $content; } public static function write_content($content, $filename) { $handle = fopen($filename,"w"); fseek($handle,0); fwrite($handle, $content); return $content; } } ?>參數含義分別是日期後自增長數的位數, 存儲的文件名稱, 日期與自增長數的分割數
注意:網站目錄下需有EveryDaySerialNumber.dat否則會發生錯誤
使用範例(一)
$obj = new FileEveryDaySerialNumber(4,"EveryDaySerialNumber.dat",","); $current_date = date("Ymd"); echo $obj->getOrUpdateNumber($current_date,1);輸出結果: 201207230001
使用範例(二)
$obj = new FileEveryDaySerialNumber(3,"EveryDaySerialNumber.dat",","); $current_date = date("ym"); echo $obj->getOrUpdateNumber($current_date,1);輸出結果: 1207001
沒有留言:
張貼留言