生成规则设计 http://hudeyong926.iteye.com/blog/1860360
订单号生成规则 系统时间随即号|系统时间数据库自增号
前阵子,公司有个电子商务项目,需要生成订单号。当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法。我们都知道,订单号最基本的要求就是唯一,这个条件必须满足。仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的 。所以上述方法不可靠,有待强化。
用上了英文字母、年月日、Unix 时间戳和微秒数、随机数,重复的可能性大大降低,还是很不错的。使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少,呵呵。substr(time(), -3)
function get_order_sn($year='2011'){ $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); $index = intval(date('Y')) - $year; if($index<0){ $index =0; } if($index>count($yCode)-1){ $index =count($yCode)-1; } $perfix = $yCode[$index] . strtoupper(dechex(date('m'))) . date('d'); $rand_num = substr(time(), -5) . substr(microtime(), 2, 5).sprintf('%03d', rand(0, 99)); $orderSn = $perfix . $rand_num; return $orderSn; }
第三种
//生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,NNNN-CC,其中:YYYY=年份,MM=月份,DD=日期,HH=24格式小时,II=分,SS=秒,NNNNNNNN=随机数,CC=检查码 function get_order_sn() { //订单号码主体(YYYYMMDDHHIISSNNNNNNNN) $order_id_main = date('YmdHis') . rand(10000000, 99999999); //订单号码主体长度 $order_id_len = strlen($order_id_main); $order_id_sum = 0; for ($i = 0; $i < $order_id_len; $i++) { $order_id_sum += (int)(substr($order_id_main, $i, 1)); } //唯一订单号码(YYYYMMDDHHIISSNNNNNNNNCC) return $order_id_main . str_pad((100 - $order_id_sum % 100) % 100, 2, '0', STR_PAD_LEFT); }
第四种
function get_order_sn() { return date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); }
方法五:生成的号码是递增的
function get_order_sn() { list($usec, $sec) = explode(' ', microtime()); return date('YmdHis', $sec).str_pad(floor($usec * 1000000), 6, '0', STR_PAD_LEFT); }
如果生成的订单要求订单号必须是连续的,并发加锁 ,要保证订单连续订单号必须在订单生成的同时++,但是多人同时操作时会出现订单号相同的冲突。解决方法:http://hudeyong926.iteye.com/blog/894823
建立一张订单号预约表,表中的订单号有效期1个小时,在有效期内被预约的号码会被用户占用,和优先使用,其他人不能使用,超过1小时就表示放弃了预约,如果用户还是用的是这个号码,就提示订单号失效了,用户必须重新获取订单号在继续操作。其他用户可以使用该号码。当用户1在订单作业时,在使用订单号200910G0016时,这个订单号就被预约了,其他人就不能使用它了,其他人就只能用下一个订单号。在一个小时内,用户1没有完成一单,不管怎样重新下单他就只能使用订单号200910G0016,超过1小时候就不能使用了。如果完成了预约(将订单号200910G0016生成了一张订单,就要删除这个号)。
相关推荐
7. **工具类的设计**:在Java等编程语言中,订单号生成工具类通常会设计为线程安全,提供静态方法供调用,以确保在多线程环境下的正确性。同时,可以考虑提供配置项,允许用户自定义订单号的格式和生成策略。 8. **...
总之,这个系统设计利用了Redis的高效性能,确保在高并发环境下也能快速生成并存储订单号,避免了数据库的频繁读写,提高了系统的响应速度和稳定性。在实际开发中,还需要考虑异常处理、连接池管理、分布式环境下的...
"magento插件-将订单号改为日期流水号"这个插件就是为了满足这一需求而设计的。 首先,我们来了解一下Magento的默认订单号系统。在Magento中,每个订单都会被赋予一个唯一的ID,这个ID通常是自增的整数。这样的设置...
在给定的信息中,我们关注的是在Java环境下处理...综上所述,解决并发生成重复订单号的关键在于正确地管理和同步多线程状态,以及设计合理的订单号生成策略。在实际应用中,还需要考虑性能、可扩展性和系统的整体架构。
2. **设计查询**:使用Access的查询设计视图,我们可以创建一个SQL查询,用于根据订单号查找相关信息。基础的SQL语句可能如下: ```sql SELECT * FROM Orders WHERE OrderID = [输入的订单号]; ``` 这里的...
在设计此类算法时,主要需要解决以下几个问题:避免数据库同步问题、时间精度与位数限制、数据库自增字段的并发压力以及避免重复订单号的检查。 1. **方案一**: 这个方案利用了当前时间(毫秒和纳秒)和机器ID来...
订单号随机生成器是一种软件工具,它主要用于生成唯一的、随机的订单编号,这对于团购商家或者电商平台来说至关重要。...通过合理设计和利用编程语言提供的各种资源,可以构建高效、实用的订单号生成系统。
订单生成过程中,使用内存IO操作结合时间戳、设备IP和序列值生成唯一的订单号,买家订单号基于`userid[0-3]`,卖家订单号基于`selleruserid[4-7]`,确保订单号的唯一性和可追溯性。此外,通过任务引擎和任务原子化...
订单信息订单号作为订单识别的标识,一般按照某种特定规则生成,根据订单的增加进行自增,同时在设计订单号的时候考虑订单无序设置(防止竞争者或者第三方来估算订单量)。 订单状态订单状态在下面章节会详细描述...
这个模块可能包含了随机数生成算法,确保生成的订单号既不会重复,也能符合淘宝平台对订单号格式的要求。它可以根据商家的需求自定义生成一定数量和范围的订单号。 "使用前必看.txt" 文件可能是包含软件使用说明和...
3. **订单查询**:支持模糊查询和多条件查询,用户可以根据订单号或其他关键信息快速查找订单状态。 4. **订单管理**:包括查看订单明细、修改订单信息(如收货地址、联系方式等)、以及删除无效或错误的订单。 在...
《网络销售订单号比对软件的设计与实现》 在当今数字化商业环境中,网络销售订单管理已经成为企业运营的重要组成部分。随着企业自营渠道的不断扩展,数据的处理和分析工作变得日益复杂,传统的统计工具往往无法满足...
这样的枚举设计有助于区分不同类型的订单,使得生成的订单号能够反映订单的性质或业务场景。 方法内部使用了一个`switch`语句来决定订单号的基本前缀。根据传入的`FormType`枚举值,方法将返回一个代表订单类型的...
1. **学会分析“模拟订单号生成”任务的实现思路**:理解订单号生成的基本原理和设计思想,包括但不限于时间戳、随机数等因素的应用。 2. **根据思路独立完成“模拟订单号生成”任务的源代码编写、编译及运行**:...
1. **需求分析阶段**:此阶段要求定义数据项,如供应商信息(编号、名称、地址、联系电话),产品信息(产品号、名称、类别),客户信息(编号、姓名、地址、电话),订单信息(订单号、客户、雇员、产品),并明确...
- **Orders表**:记录订单号(主键,同时也是OrderItems表的外键)、订单日期和客户ID(外键)。 - **OrderItems表**:存储订单号(主键,外键)、订单项、产品ID(外键)、数量和单价等信息。 - **Products表**:...
此外,还包括支付时间、outTradeNo(支付宝订单号)、配送方式、期望配送日期、商品总额、运费、实际付款和订单状态。订单状态可以采用如10、20、30等数字表示,方便在项目中扩展新的状态。 订单商品表(order_...
1.E-R图向关系模式转换(关系的码用下划线标出) ①旅客实体对应的关系模式: 旅客(身份证号,姓名,性别,联系方式) 函数依赖: ...订单号—>座位号 订单号—>作为总数 订单号—>剩余座位数
这种设计使得订单号具有一定的业务含义,同时也方便识别不同类型的订单。 接下来,订单号的序列号部分是基于当前时间的。代码中使用了`DateTime.Now`获取当前时间,并分别取年、月、日、小时、分钟、秒和毫秒作为...