简单介绍订单号或者流水号的生成方法

简介: 简单介绍订单号或者流水号的生成方法

一般订单号或者流水号等可能在一些平台会用到,然后我就简单的介绍一个我自己生成订单号和流水号的一个方法吧,如果程序有问题或者你有更好的生成办法,欢迎留言,留下你的文章链接,我们一起学习和进步哈。


方法简介:

一般订单号或者流水号的生成,是时间戳+随机数(或者自己写的算法生成),或者是时间戳+订单类型+随机数

比如在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


相关文章
|
NoSQL Java Redis
服务端如何防止订单重复支付!
如图是一个简化的下单流程,首先是提交订单,然后是支付。 支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互。 支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。
服务端如何防止订单重复支付!
|
8天前
|
存储 JSON Java
1688订单接口获取指南
在电子商务中,订单数据的获取和管理至关重要。1688作为中国领先的B2B平台,提供了订单详情接口,允许开发者通过订单号获取详细信息,包括订单状态、收货地址、商品列表等。本文介绍如何使用该接口,涵盖注册账号、获取API密钥、安装必要库、构造请求URL、发送HTTP请求、解析响应数据及异常处理等内容,并提供Java示例代码。注意事项包括合规使用、数据安全和高效利用。
|
10天前
|
API 数据安全/隐私保护 开发者
商品订单接口获取及作用详解
在电商平台的后台管理中,订单接口至关重要。本文介绍了如何获取商品订单接口及其作用,包括注册开发者账号、创建应用、申请API权限和调用接口获取订单及物流信息的详细步骤,并提供了Python示例代码。同时,强调了遵守平台规则、数据安全和接口维护的重要性。
|
7月前
|
API
taobao.trade.memo.update( 修改交易备注 ) 丨淘宝店铺订单接口
taobao.trade.memo.update( 修改交易备注 ) 丨淘宝店铺订单接口
|
SQL 缓存 NoSQL
商品秒杀情况下使用商品id做Redis缓存
商品秒杀情况下使用商品id做Redis缓存
86 0
|
存储 NoSQL Redis
下单接口防重提交问题
下单接口防重提交问题
|
前端开发 应用服务中间件 API
订单异步通知修改订单状态
订单异步通知修改订单状态
订单异步通知修改订单状态
out_trade_no商户订单号参数详解-参数解读系列
说明 out_trade_no,商户订单号,64个字符以内,可以包含字母、数字、下划线;需保证在商户端不重复。 这个参数是对接支付宝支付接口的商户自己定义传值的一个参数,商户需要保证这个参数不会重复,所以不能使用同一个订单号去请求接口,当然交易未在支付宝这边创建是可以使用相同订单号去请求的,不同接口交易创建的时机各有不同,下面就详细介绍各个接口如何配置订单号(JAVA代码示例)、及已存在支付成功的交易再用相同订单号去请求所报的错误。
3863 12
|
开发工具
alipay.trade.refund(统一收单交易退款接口)如何判断退款是否成功
1、通过同步返回的信息来判断退款   调用退款接口成功同步返回信息示例: {"alipay_trade_refund_response":{"code":"10000","msg":"Success","buyer_logon_id":"150****8675","buyer_user_id":"...
2683 12
如何生成16位流水号
原文:如何生成16位流水号 /** * @Description: 获取long类型16流水号 * @return serialNo long类型16流水号 * @date 2017年07月20日 下午03:55:21 */ public...
973 0