PHP版本的自动生成有规则的订单号(或编号)

<?php
/**
* PHP版本的自动生成有规则的订单号(或编号)
* 生成的格式是: 20130103000001 前面几位为当前的日期,后面6位为系统自增长类型的编号
* 原理: 
* 1.获取当前日期格式化值;
* 2.读取文件,上次编号的值+1最为当前此次编号的值(记录以文件的形式存储)
* (下月会接着这个编号)
*/

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;
	}
}

//测试代码
//参数含义分别是日期后自增长数的位数, 存储的文件名称, 日期与自增长数的分割数
$obj = new FileEveryDaySerialNumber(6,"EveryDaySerialNumber.dat",","); 
$current_date = date("Ymd");
echo $obj->getOrUpdateNumber($current_date,1);

?>
时间: 2024-08-10 10:57:03

PHP版本的自动生成有规则的订单号(或编号)的相关文章

如何生成不重复的订单号?这里提供一个不重复订单号生成方法

最近老是被运营抱怨订单号太长不方便输入,可是如果随机生成太短的订单号又容易重复,造成客户提交订单失败. 夜不能眠下写了这个工具,完美解决了问题,在这里分享下,由于时间紧张考虑可能不太周到,如发现问题欢迎指教. import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * 订单号生成器 */ public class OrderNoGenerator { private int size; p

make--变量与函数的综合示例 自动生成依赖关系

一.变量与函数的示例 示例的要求1.自动生成target文件夹存放可执行文件2.自动生成objs文件夹存放编译生成的目标文件3.支持调试版本的编译选项4.考虑代码的扩展性完成该示例所需的1.$(wildcardpattern)获取当前工作目录中满足pattern的文件或目录列表2.$(addprefix,_name)给名字列表name的每一个名字增加前缀_prefix关键技巧1.自动获取当前目录下的源文件列表(函数调用) SRC : = $(wildcard *.c) 2.根据源文件列表生成目标

Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public int Age { get; set; } [Required] [StringLength(50)] public string Name { get; set; } } 如果我们进行分页的话,一般使用Skip和Take方法,这里一行最简单的代码如下: mContext.Emp.OrderBy(e

按规则自动生成单据编号 以及并发问题

描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否则后面的号码全是0 --有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始 --项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号

自动生成版本信息,重新编译指定文件,一键编译IAR工程同时生成hex,bin,out文件

平台:IAR + windows_bat 1.自动生成版本信息 目的: 脚本自动更新程序svn对应的的版本号 前提: svn需要安装command line (参考 https://jingyan.baidu.com/article/a3a3f8113f89198da2eb8aed.html) 主要技术点: 具体.bat脚本主要来源于网络,文件放置在agv_dev_platform->User目录下,编译脚本将生成svnversion.h文件,文件内容仅是SVN_REVISION的一个宏,最终程

wadl 的自动生成(cxf版本3.1.1)

官方文档 http://cxf.apache.org/docs/jaxrs-services-description.html 举例: package cn.zno; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; impo

Makeflie自动生成依赖,自动化编译

在netbeans里开发,有一个重要文件makefile,是用来编译所有的文件. 项目的目录结构如下,扁平的目录结构,如何实现自动化编译,写makefile呢? 第一版 基础版: CC = g++ CFLAGS = -O3 -DNDEBUG SOURCE =AdaBoost.cpp aodeselect.cpp sample.cpp vfan.cpp kdbext2.cpp tan_gen.cpp petal: ${SOURCE} $(CC) -o [email protected] ${SOU

CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能

背景 手上有一个这样的系统:后台可以直接新建项目(网站),只需输入项目名称.访问域名(二级)以及其他一些额外信息,就可自动生成一个模板网站.大致原理是:提交这些信息的时候,后台会给项目新建一个目录,并把一些必须的文件拷贝过去,然后会有一个二级域名映射文件实现二级域名访问.当然,一级域名可实现访问,前提是要完成备案. 之前对于单个项目都是通过一个统一sftp账号管理的,随着项目的增多,发现要找到相应目录会比较困难,所以现在希望在新建项目的时候能够自动生成对应的sftp账号,实现一对一管理. 过程

七色花基本权限系统(5)- 实体配置的使用和利用T4自动生成实体配置

在前面的章节里,用户表的结构非常简单,没有控制如何映射到数据库.通常,需要对字段的长度.是否可为空甚至特定数据类型进行设置,因为EntityFramework的默认映射规则相对而言比较简单和通用.在这篇日志里,将演示如何对数据实体进行映射配置,并利用T4模板自动创建映射配置类文件. 配置方式 EntityFramework的实体映射配置有2种. 第一种是直接在实体类中以特性的方式进行控制,这些特性有部分是EF实现的,也有部分是非EF实现的.也就是说,在数据实体层不引用EF的情况下,只能使用不全的