用户ID首先生成,订单ID的生成可依赖用户ID。

下面代码前六位是日期,后八位是随机数,用于生成用户ID。

     public String getNewUserId() {
String ipAddress = "";
try {
//获取服务器IP地址
ipAddress = InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
logger.error("getNewUserId=" + e.getMessage());
}
//获取UUID
String uuid = ipAddress + "$" + UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
//生成后缀
long suffix = Math.abs(uuid.hashCode() % 100000000);
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
String time = sdf.format(new Date(System.currentTimeMillis()));
//生成前缀
long prefix = Long.parseLong(time) * 100000000;
String userId = String.valueOf(prefix + suffix);
return userId;
}

接下来的订单ID就可以随意点了,可添加自定义前缀等。

     public String buildOrderIdByUserId(String userId) {
SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
String time = df.format(new Date());
Random random = new Random();
int randomNum = random.nextInt(999) % 900 + 100;
StringBuilder sb = new StringBuilder("ZMM");
return sb.append(time).append(userId).append(randomNum).toString();
}

如果还有相应的月份分表,之后就可以根据用户ID得到该用户所在月表,根据该订单得到该订单所在月表,直接截取相应ID的固定位置即可

比如:

     public String getMonthByOrderId(String orderId) {
return "20" + orderId.substring(3, 7);
}

时间字符串可以使用JDK8新增的线程安全的时间格式化类来生成:

        LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String dateStr = dateTimeFormatter.format(localDateTime);
System.out.println(dateStr);

附录:

(1)记录一个博客,介绍唯一性ID的,可以了解一下:https://www.cnblogs.com/haoxinyue/p/5208136.html

(2)附加一个我目前项目中用的一个代码:

/**
* 根据指定前缀生成ID
* @param preStr
* @return
*/
public static String buildId(String preStr){
if (StringUtils.isEmpty(preStr)){
logger.error("buildId preStr is error, preStr = " + preStr);
return null;
}
//获取UUID
String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
//生成后缀
long suffix = Math.abs(uuid.hashCode() % 100000000);
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
String time = sdf.format(new Date(System.currentTimeMillis()));
//生成前缀
long prefix = Long.parseLong(time) * 100000000;
String userId = preStr + String.valueOf(prefix + suffix);
return userId;
}

Java 利用 UUID 生成唯一性 ID 示例代码的更多相关文章

  1. 利用zookeeper生成唯一id,通用性代码

    在上篇中是写死的,这章就写出通用的 package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; impo ...

  2. Java利用poi生成word(包含插入图片,动态表格,行合并)

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  3. 封装各种生成唯一性ID算法的工具类

    /** * Copyright (c) 2005-2012 springside.org.cn * * Licensed under the Apache License, Version 2.0 ( ...

  4. Java利用Zxing生成二维码

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing ...

  5. Java利用模板生成pdf并导出

    1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...

  6. 基于UUID生成短ID

    为什么需要短ID 数据库操作过程最常用到: 自增ID UUID 前者多数依赖Mysql的auto_increment,但数据移植麻烦. 如果是主从或主主,不同库里自增ID还可能不一致. 后者长度是个问 ...

  7. C# 实现 Snowflake算法生成唯一性Id

    参考地址:https://blog.csdn.net/w200221626/article/details/52064976 /// <summary> /// 动态生产有规律的ID // ...

  8. java对接申通下单接口示例代码

    上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...

  9. java通过UUID生成16位唯一订单号

    import java.util.UUID; public class T { public static String getOrderIdByUUId() { int machineId = 1; ...

随机推荐

  1. DynamoDB

    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html Creating a  New  Table I ...

  2. Oracle 12c 创建新的数据库实例、用户

    前提:安装好了Oracle 12c数据库,已有一个数据库实例xe,登录用户/密码:system/oralce 我用的是docker安装的Oracle 12c的实例: docker run --name ...

  3. 使用SQL创建唯一索引

    使用sql语句创建唯一索引,格式如下: create unique index 索引名 on 表名(列名1,列名2……) 示例:在表GoodsMade_Labour的SID列上创建唯一索引IX_Goo ...

  4. 较大的互联网公司对Java的要求(转)

    现在各大互联网公司,对Java类的校招要求越来越高,导致很多小伙伴都很迷茫,今天分享一篇谢照东关于Java学习进阶之路,希望能帮助到一些人 佛说五蕴六毒是妄,将因果都念作业障 把看过的书罗列一下 &l ...

  5. Python二维数组,坑苦了

    myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] my ...

  6. Vue的双向数据绑定

    最简单的实现v-model数据绑定,只需要在一个组件里面有个props,加上一个value,然后当组件要去修改数据的时候, $emit一个input事件,并且把新的值传出去.这就实现了Vue里面的数据 ...

  7. TestNG的使用方法

      本文转载自于:https://blog.csdn.net/qq_24373725/article/category/7432624       TestNG介绍 TestNG是Java中的一个测试 ...

  8. opencv的安装

    网上搜了好多文章安装opencv3.2.0都未能成功,写的也个不相同,后来找到了opencv官网的教程,看了后才发现,这上面才是最详细的. 于是按照opencv官网教程安装,安装的一半就中断了.经过苦 ...

  9. 实践中 XunSearch(讯搜)更新索引方案对比

    检测PHP-SDK的运行条件(查看是否支持XunSearch)   $prefix/sdk/php/util/RequiredCheck.php $prefix #替换成你的安装目录 使用 XunSe ...

  10. Session使用(14)

    用session统计某个网页的访问人数(因为我还不会js,所以就做了个简易版本的) 1.创建Session监听器,每创建了一个Session对象就执行监听类中·的sessionCreated方法. p ...