简单介绍订单号或者流水号的生成方法
一般订单号或者流水号等可能在一些平台会用到,然后我就简单的介绍一个我自己生成订单号和流水号的一个方法吧,如果程序有问题或者你有更好的生成办法,欢迎留言,留下你的文章链接,我们一起学习和进步哈。
方法简介:
一般订单号或者流水号的生成,是时间戳+随机数(或者自己写的算法生成),或者是时间戳+订单类型+随机数
比如在A平台付款的,订单类型就是0001,B平台付款的就是0002,总之可以自己想怎么定义就怎么定义,
这里我介绍的是时间戳包括秒(14位)+随机6位数
时间戳生成方法:
这里就不多解释了,相信你写的项目都会用到生成时间的
/*** 获取YYYY-MM-DD HH:mm:ss格式* @return*/public static String getTime() {SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("时间戳:"+sdfTime.format(new Date()));return sdfTime.format(new Date());}
但是生成的时间是xxxx-xx-xx xx:xx:xx带 - 和 冒号的,我们要把它去掉,相信去掉的方法有很多,我这里用的是正则去掉的
getTime().replaceAll("[[\\s-:punct:]]", "")
有的小伙伴们可能会说,如果一秒+随机数的话,并发量如果很大的话,可能会重复,如果是这样的话,大家可以再在将时间精确到毫秒,如下代码,毫秒+随机数 还是有重复的话,可以再在将随机数扩大到8位10位这样,如果这样在毫秒级别还能重复,那你的并发量是有多大,这么大的企业,自己可以写一个生成订单号的算法了吧,小白只能膜拜大佬了,请问可以招我入职吗
/*** 获取YYYY-MM-DD HH:mm:ss:SS格式 精确到毫秒* @return*/public static String getTime() {SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");System.out.println("时间戳:"+sdfTime.format(new Date()));return sdfTime.format(new Date());}
随机6位数生成方法:
这里用到的是java.util.Random类 的Random()方法的nextInt()方法,
讲到这里,就得讲一下 java.lang.Math 类 的Math.random() 方法
区别和联系,其实这两个都是能够生成随机数的,
java.util.Random类中的nextXxxx系列方法生成0-n的随机数;
Math.random() 方法生成[0, 1)范围内的double类型随机数,如果要生成[0,n)范围的,只要乘一个 (n-1)就可以啦
还有最重要的一点,Math.random()是线程安全的,多线程环境也能使用,具体的区别我这里就不多讲了,大家也可以百度这两者之间的区别,比如可以参考一下这篇文章:https://blog.csdn.net/u012099869/article/details/50394644
/*** 随机生成六位数验证码* @return*/public static int getRandomNum(){Random r = new Random();return r.nextInt(900000)+100000;//(int)(Math.random()*999999)}
生成订单号如图所示
精确到秒:前面14位是时间,后面6位随机生成
精确到毫秒:前面17位是时间,后面6位是随机生成
生成订单号的demo代码可以下载:(只有一个java文件)
https://download.csdn.net/download/qq_27471405/10696399
参考文章:
https://blog.csdn.net/u012099869/article/details/50394644
感谢原作者的分享,让技术人能够更快的解决问题
简单介绍订单号或者流水号的生成方法相关推荐
- Java 有序生成订单号或流水号
前言 最近用到了一些编号的生成规则记录一下,有序的生成订单号或者流水号 概述 第一种方式,适用于循环生成订单编号,例如有 100 条数据,需要循环生成相对应编号可以使用,下方的方法,仅限于特定 ...
- java 生成交易快照_Java生成订单号/交易流水号
分析:既然是订单号/交易流水号,首先是不能重复,其次需考虑到性能问题. 设计如下: "HF"+时间戳+随机数+循环数 代码如下: int x = 1000; for(int i=0 ...
- 订单号补0操作便捷方法
之前业务需要生成诸如TEST201912100000000008的订单号,订单号后面的10位数字需要进行补0操作,一直用的方法一感觉很笨拙,前段时间突然发现JDK1.5中,String类新增了一个很有 ...
- 引用 DateTime.Now.ToString() 生成编号或者简单的订单号;
制作一个简单的利用日期转换字符串生成的编号,例如:DateTime.Now.ToString("YYDJyyyyMddHmmss")+"DONGF"; 生成的号 ...
- 订单号唯一ID顺序生成(一个轻量的实现)
一个唯一的ID可以使用UUID,但不是顺序的. 一个自增的ID可以使用数据库序列.自增主键.雪花算法等等. 本文分享一个简单实用的一个ID生成代码,支持生成顺序自增且唯一的ID,一个工具类可以直接拷贝 ...
- Java16位订单号,Java通过UUID生成16位唯一订单号
小编在工作中遇到了标题中的场景,先查了一些微博,参考下大佬经验.最终发现大家写的都是一套代码,没有太多的信息量做对比,并且UUID的hashcode值重复的概率有多大问题,没有人给解释.小编根据自己经 ...
- 简单介绍Linux进程文件路径的获取方法
Linux进程文件路径在哪里才能找得到呢,有时会让Linux系统管理员费些心思,这里小编说一个简单的案例,相信会让不少管理员有所收获,帮助轻松获得想要的Linux进程文件路径,完成指定任务. 进入/p ...
- java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法
最近一段时间都是在补之前的技术债,一直忙着写业务代码没有注重代码的质量,leader也在强求,所有要把单元测试搞起来了 我把单元测试分为两种 一个是service的单元测试,一个是controller ...
- 简单介绍.Net性能测试框架Crank的使用方法
这篇文章介绍了.Net性能测试框架Crank的使用方法.对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 Crank 是微软新出的一个性能测试框架,集成了多种基准测 ...
最新文章
- Mysql性能优化方案
- IDEA下JNI开发快速生成头文件方法
- 如何步入深度学习刷榜第一重境界
- 曲奇问答CEO:从产品经理的角度玩转社区类产品
- ubuntu apt-get update 由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32
- 报错:“-bash: git: 未找到命令”
- pip install python -32_pip安装python模块方法
- 15分钟构建超低成本数据大屏:DataV + DLA
- MySQL avg()函数
- Java的多态形式中,如何访问成员变量和调用成员方法
- Windows 手动触发 BSOD
- Java构建工具:Maven与Gradle的对比
- c语言 字符串转整型
- 2008r2 请检查名称的拼写_甲状腺素、甲状腺激素、T3、T4…这些名称你分得清吗?...
- 下一个20年: 从搜索经济到算法经济 (从B站跨年爆红 等想到的)
- 数学微笑了,迎来美好发展时光
- ADC—应用交付-AX系列
- 解决vscode突然不能自动补全html标签
- 阿松嘚嘚嘚-数据库篇2-完美范式不完美
- 相关方管理---章节练习