如何生成唯一订单号(转)

首先,订单号有3个性质:1.唯一性  2.不可推测性 3.效率性

唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复。况且满足这些条件的同时订单号还要足够的短。我在java下定制的订单号生成方式如下:int r1=(int)(Math.random()*(10));//产生2个0-9的随机数int r2=(int)(Math.random()*(10));long now = System.currentTimeMillis();//一个13位的时间戳String paymentID =String.valueOf(r1)+String.valueOf(r2)+String.valueOf(now);// 订单ID

目前规则来看,两个人在同一微秒提交订单重复的概率为1%订单效果:251393292999921

C#版:
            Random r = new Random();
            for (int i = 0; i < 20; i++)
            {
                int r1 = (int)(r.Next(1, 9) * (10));//产生2个0-9的随机数
                int r2 = (int)(r.Next(1, 9) * (10));
                DateTime tmpTime = DateTime.Now;
                long now = long.Parse(tmpTime.ToString("yyMMddHHmmss") + "99" + tmpTime.Millisecond.ToString());//一个13位的时间戳
                string paymentID = Convert.ToString(r1) + "_" + Convert.ToString(r2) + "_" + Convert.ToString(now);// 订单ID
                textBox2.AppendText(paymentID + "\r\n");
            }

  还有一个性质,不能太长。日期时间不应该显式显示,转换成int会节省一两位数字。

如何生成唯一订单号(转)

时间: 2024-10-18 10:44:53

如何生成唯一订单号(转)的相关文章

php生成唯一订单号

支持更改长度/** * 生成唯一订单号 * */ function build_order_no(){ return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); }

c# asp.net 生成唯一订单号

c# asp.net 生成唯一订单号 string OrderNo = DateTime.Now.Year.ToString().Substring(2, 2) + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Hour.ToString().PadLeft(2, '0') + DateTime.Now.Minute.ToStri

C# 生成唯一订单号

根据GUID+DateTime.Now.Ticks生产唯一订单号 1 /// <summary> 2 /// 生成唯一数 3 /// </summary> 4 public class UniqueData 5 { 6 private static object obj = new object(); 7 private static int GuidInt { get { return Guid.NewGuid().GetHashCode(); } } 8 private sta

mysql使用触发器生成唯一订单号,

需求:订单号唯一,并且期望是时间格式加其他字符串, 实现:采用触发机制,在新增时根据新增id值加1作为订单生成的随机且确定唯一的数,因为id唯一: 遇到问题:新增时不能提前知道id值, 解决:取到当前表中最大值+1即为id: 业务需要研究几个小时终于实现一套可行方案: 代码: 建表 DROP TABLE IF EXISTS `qs_test`; CREATE TABLE `qs_test` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ord

生成唯一订单号 (支持每秒1000个并发)

#region 订单号生成(支持每秒1000个并发) private static object locker = new object(); private static int sn = 0; public static string GetOrderNO() { lock (locker) { if (sn == 999) sn = 0; else sn++; return DateTime.Now.ToString("yyMMddHHmmssfff") + sn.ToStrin

MySQL使用过程存储生成唯一订单号

数据库表: /* Navicat MySQL Data Transfer Source Server : local Source Server Version : 50640 Source Host : localhost:3306 Source Database : springsecurity Target Server Type : MYSQL Target Server Version : 50640 File Encoding : 65001 Date: 2018-08-25 22:

两个PHP方面的东西,超过2038的时间和唯一订单号算法

2014年10月01日  php开发 1条评论 阅读264次 DateTime::format 被设计成不受外部设置影响(面向对象就应该如此)所以无论你如何改变环境参数 date_default_timezone ,都不会影响输出结果要想改变 DateTime::format 的时区设置,需要向 DateTime::setTimezone 传入一个时区对象 DateTimeZone 1 $d = new DateTime('@2444486400'); 2 $d->setTimezone(new

c#唯一订单号生成代码

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string uniqueNum = GenerateOrderNumber(); Console.WriteLin

生成随机订单号

//生成随机订单号 $yCode = array('A','B','C','D','E','F','G','H','I','J'); $orderid = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));