生成的格式是: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
沒有留言:
張貼留言