Java 利用 UUID 生成唯一性 ID 示例代码

java

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

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

 1     public String getNewUserId() {

2 String ipAddress = "";

3 try {

4 //获取服务器IP地址

5 ipAddress = InetAddress.getLocalHost().getHostAddress();

6 } catch (Exception e) {

7 logger.error("getNewUserId=" + e.getMessage());

8 }

9 //获取UUID

10 String uuid = ipAddress + "$" + UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();

11 //生成后缀

12 long suffix = Math.abs(uuid.hashCode() % 100000000);

13 SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");

14 String time = sdf.format(new Date(System.currentTimeMillis()));

15 //生成前缀

16 long prefix = Long.parseLong(time) * 100000000;

17 String userId = String.valueOf(prefix + suffix);

18 return userId;

19 }

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

1     public String buildOrderIdByUserId(String userId) {

2 SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");

3 String time = df.format(new Date());

4 Random random = new Random();

5 int randomNum = random.nextInt(999) % 900 + 100;

6 StringBuilder sb = new StringBuilder("ZMM");

7 return sb.append(time).append(userId).append(randomNum).toString();

8 }

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

比如:

1     public String getMonthByOrderId(String orderId) {

2 return "20" + orderId.substring(3, 7);

3 }

时间字符串可以使用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 示例代码 的全部内容, 来源链接: utcz.com/z/391262.html

回到顶部