一般订单号或者流水号等可能在一些平台会用到,然后我就简单的介绍一个我自己生成订单号和流水号的一个方法吧,如果程序有问题或者你有更好的生成办法,欢迎留言,留下你的文章链接,我们一起学习和进步哈。
方法简介:
一般订单号或者流水号的生成,是时间戳+随机数(或者自己写的算法生成),或者是时间戳+订单类型+随机数
比如在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()是线程安全的,多线程环境也能使用,具体的区别我这里就不多讲了,大家也可以百度这两者之间的区别,
/** * 随机生成六位数验证码 * @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