`
hudeyong926
  • 浏览: 2034839 次
  • 来自: 武汉
社区版块
存档分类
最新评论

订单号的设计

阅读更多

生成规则设计 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生成了一张订单,就要删除这个号)。

  • 大小: 145.1 KB
分享到:
评论

相关推荐

    订单号生成工具类

    7. **工具类的设计**:在Java等编程语言中,订单号生成工具类通常会设计为线程安全,提供静态方法供调用,以确保在多线程环境下的正确性。同时,可以考虑提供配置项,允许用户自定义订单号的格式和生成策略。 8. **...

    订单号的生成redis中获取

    总之,这个系统设计利用了Redis的高效性能,确保在高并发环境下也能快速生成并存储订单号,避免了数据库的频繁读写,提高了系统的响应速度和稳定性。在实际开发中,还需要考虑异常处理、连接池管理、分布式环境下的...

    高并发订单号生成工具类

    高并发订单号生成工具类,TWITTER编码方式可BAIDU

    magento插件-将订单号改为日期流水号

    "magento插件-将订单号改为日期流水号"这个插件就是为了满足这一需求而设计的。 首先,我们来了解一下Magento的默认订单号系统。在Magento中,每个订单都会被赋予一个唯一的ID,这个ID通常是自增的整数。这样的设置...

    并发生成重复订单号1

    在给定的信息中,我们关注的是在Java环境下处理...综上所述,解决并发生成重复订单号的关键在于正确地管理和同步多线程状态,以及设计合理的订单号生成策略。在实际应用中,还需要考虑性能、可扩展性和系统的整体架构。

    实现订单号查询access数据库的方法

    2. **设计查询**:使用Access的查询设计视图,我们可以创建一个SQL查询,用于根据订单号查找相关信息。基础的SQL语句可能如下: ```sql SELECT * FROM Orders WHERE OrderID = [输入的订单号]; ``` 这里的...

    银联订单号永远不会重复的生成算法分析与示例

    在设计此类算法时,主要需要解决以下几个问题:避免数据库同步问题、时间精度与位数限制、数据库自增字段的并发压力以及避免重复订单号的检查。 1. **方案一**: 这个方案利用了当前时间(毫秒和纳秒)和机器ID来...

    订单号随机生成器

    订单号随机生成器是一种软件工具,它主要用于生成唯一的、随机的订单编号,这对于团购商家或者电商平台来说至关重要。...通过合理设计和利用编程语言提供的各种资源,可以构建高效、实用的订单号生成系统。

    日均千万级订单水平拆分方案设计

    订单生成过程中,使用内存IO操作结合时间戳、设备IP和序列值生成唯一的订单号,买家订单号基于`userid[0-3]`,卖家订单号基于`selleruserid[4-7]`,确保订单号的唯一性和可追溯性。此外,通过任务引擎和任务原子化...

    电商系统之订单设计篇.docx

    订单信息订单号作为订单识别的标识,一般按照某种特定规则生成,根据订单的增加进行自增,同时在设计订单号的时候考虑订单无序设置(防止竞争者或者第三方来估算订单量)。 订单状态订单状态在下面章节会详细描述...

    淘宝快递订单生成器

    这个模块可能包含了随机数生成算法,确保生成的订单号既不会重复,也能符合淘宝平台对订单号格式的要求。它可以根据商家的需求自定义生成一定数量和范围的订单号。 "使用前必看.txt" 文件可能是包含软件使用说明和...

    物流系统订单模块数据库设计报告 (2).pdf

    3. **订单查询**:支持模糊查询和多条件查询,用户可以根据订单号或其他关键信息快速查找订单状态。 4. **订单管理**:包括查看订单明细、修改订单信息(如收货地址、联系方式等)、以及删除无效或错误的订单。 在...

    网络销售订单号比对软.pdf

    《网络销售订单号比对软件的设计与实现》 在当今数字化商业环境中,网络销售订单管理已经成为企业运营的重要组成部分。随着企业自营渠道的不断扩展,数据的处理和分析工作变得日益复杂,传统的统计工具往往无法满足...

    java web在高并发和分布式下实现订单号生成唯一的解决方案

    Java Web 在高并发和分布式下实现订单号生成唯一的解决方案 在高并发和分布式下,实现订单号生成唯一是 Java Web 开发中的一大挑战。为了解决这个问题,我们需要从多方面考虑,包括时间戳、随机数、线程ID、进程ID...

    利用asp.net实现生成不重复订单号

    这样的枚举设计有助于区分不同类型的订单,使得生成的订单号能够反映订单的性质或业务场景。 方法内部使用了一个`switch`语句来决定订单号的基本前缀。根据传入的`FormType`枚举值,方法将返回一个代表订单类型的...

    《模拟订单号生成(Java)》实验报告

    1. **学会分析“模拟订单号生成”任务的实现思路**:理解订单号生成的基本原理和设计思想,包括但不限于时间戳、随机数等因素的应用。 2. **根据思路独立完成“模拟订单号生成”任务的源代码编写、编译及运行**:...

    销售订单数据库管理系统课程设计说明书(doc 19页).docx

    1. **需求分析阶段**:此阶段要求定义数据项,如供应商信息(编号、名称、地址、联系电话),产品信息(产品号、名称、类别),客户信息(编号、姓名、地址、电话),订单信息(订单号、客户、雇员、产品),并明确...

    供应商订单管理系统数据库设计.pdf

    - **Orders表**:记录订单号(主键,同时也是OrderItems表的外键)、订单日期和客户ID(外键)。 - **OrderItems表**:存储订单号(主键,外键)、订单项、产品ID(外键)、数量和单价等信息。 - **Products表**:...

    购物商城数据库设计-订单系统设计.pdf

    此外,还包括支付时间、outTradeNo(支付宝订单号)、配送方式、期望配送日期、商品总额、运费、实际付款和订单状态。订单状态可以采用如10、20、30等数字表示,方便在项目中扩展新的状态。 订单商品表(order_...

Global site tag (gtag.js) - Google Analytics