不重复订单号生成的方法

第一种        GUID  由算法自动生成下 理论上能产生全球唯一的值   不过对于用户记订单号不方便 

                   Console.WriteLine(System.Guid.NewGuid());
                   Console.ReadKey(); 
                   //生成结果:5322d297-51b4-4198-8625-cc465c948852

第二种   随机数1000-9000范围内的数 再根据时分秒生成   不过大数据并发依然有重复的可能
                 Random rand = new Random();
                 int shu2 = rand.Next(1000, 9999);
                 string randId = DateTime.Now.ToString("yyyyMMddHHmmss") + shu2;
                 Console.WriteLine(randId);
                 Console.ReadLine();

 

第三种     给订单号设置自增  虽不会重复  但标志列只有一个   Id就不能唯一
            
第四种     简单一点的,可以由用户ID(数字)、时间、随机数组合生成,因为用户ID是唯一的,生成的订单号也就不会重复了


第五种     用64位MD5对用户名和时间加密,再用加密后的签名做订单号。理论上来说该算法是不会重复的,除非订单量超过了2的64次方

第六种     IP地址、时间、计算机机器码、用户名、随机数  时间戳(10)+省id(6)+市id(6)+区id(6)+四位随机数(4)

第七种   有网友并发性lock解决为了解决并发性,就直接在生成订单号的区域块加上lock

1.新建项目

2.新建BillNumberBuilder 类

 

3.新建OrderIdHelper

4.生成

 

生成结果

Wen20170309180733
Wen20170309180735

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值