生成订单号

生成订单号,最大的问题是要考虑高并发的时候.在网上找的一些方案往往在这种情况下难以适用,比如,查询订单序列最大数,根据系统时间生成等.

再考虑另一种可行的方案:数据库递增序列,没错,确实能解决高并发的问题,但在集群等情况下对数据库压力比较大,而且有些数据库对递增序列没有很好的支持,同时递增序列的位数是一直增加的,也有可能会超出数据库表字段限制.

最好的方案是用java的uuid工具类生成唯一的字符串,然后再取这个字符串对象的hashcode值,因为字符串的值是唯一的,它的hashcode也是唯一的.

可参考如下代码:

 /** 生成订单号,订单号的组成: 两位年+两位月+两位日+uuid哈希号(由于hashcode返回类型是int,最大为2147483648,不超过十位,所以此订单号不超过16位) 
   * @return
   * @throws Exception 
  **/

public  String buildOrderSn() throws Exception {
		Date createDate = new  Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
		StringBuilder out  = new StringBuilder(dateFormat.format(createDate));
		dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		int uuidNum = UUID.randomUUID().toString().hashCode();
		out.append(uuidNum);
		return out.toString();
	}

生成订单号,布布扣,bubuko.com

时间: 2024-08-02 10:45:44

生成订单号的相关文章

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

生成订单号 、生成优惠券号 前四位大写字母 后六位数字

// 生成订单号 public static String setRandomChar() { String str = ""; for (int i = 0; i < 10; i++) { int ch = (int) (10 * (Math.random())); str = str + ch; } return str; } // 生成优惠券号 前四位大写字母 后六位数字 public static String genCouponCode() { String str =

PHP生成订单号(产品号+年的后2位+月+日+订单号)

require '../common.inc.php'; /* * 产品号+年的后2位+月+日+订单数 * @param [Int] $prodcutId 产品号 * @param [Int] $tradeItemid 订单号 * @return [String] 返回生成订单号串 */ function getTradeNO($prodcutId,$tradeItemid){ if(!is_integer($prodcutId)||!is_integer($tradeItemid))retur

RNGCryptoServiceProvider 生成订单号

先生成1~1000的随机数 class Program { // Create a new instance of the RNGCryptoServiceProvider. private static System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); static void Main(string[]

生成自增的编号,生成订单号

生成自增的编号: /**  * 生成工单编码  *   * @param workSheetType  *            工单类型  * @param systemName  *            系统名称  * @param cityCode  *            城市编码  * @return 形如AAA-BBB-CC-081127-0029  */ public synchronized String nextWorkSheetNum(String workSheetTy

订单号生成规则

前阵子,公司有个电子商务项目,需要生成订单号.当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法.我们都知道,订单号最基本的要求就是唯一,这个条件必须满足.仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的.所以上述方法不可靠,有待强化.在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母.年月日.Unix 时间戳和微秒数.随机数,重复的可能性大大

C# 订单号的生成

/**        * 根据当前系统时间加随机序列来生成订单号         * @return 订单号        */        public static string GenerateOrderNo()        {            Random ran = new Random();            return string.Format("{0}{1}{2}", "用户id", DateTime.Now.ToString(&q

项目笔记之订单号生成规则以及方法,第一篇!

小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢小编就带领大家去解读一下生成订单号的问题! 首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程序的都讲究严谨性,而且在订单模块的开发中

生成一个不重复的订单号(php)

/** * 生成订单号 * * 用uniqid获取一个基于当前的微秒数生成的唯一不重复的字符串(但是他的前7位貌似很久才会发生变动,所以不用考虑可删除),取其第8到13位.但是这个字符串里面有英文字母,咋办? * 用ord获取他的ASCII码,所以就有了下一步:用str_split把这个字符串分割为数组,用array_map去操作(速度快点). * 然后返回的还是一个数组,KO,在用implode弄成字符串,但是字符长度不定,取前固定的几位,然后前面加上当前的年份和日期,这个方法生成的订单号,全