Java 利用 UUID 生成唯一性 ID 示例代码
用户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 示例代码的更多相关文章
- 利用zookeeper生成唯一id,通用性代码
在上篇中是写死的,这章就写出通用的 package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; impo ...
- Java利用poi生成word(包含插入图片,动态表格,行合并)
转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...
- 封装各种生成唯一性ID算法的工具类
/** * Copyright (c) 2005-2012 springside.org.cn * * Licensed under the Apache License, Version 2.0 ( ...
- Java利用Zxing生成二维码
Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing ...
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- 基于UUID生成短ID
为什么需要短ID 数据库操作过程最常用到: 自增ID UUID 前者多数依赖Mysql的auto_increment,但数据移植麻烦. 如果是主从或主主,不同库里自增ID还可能不一致. 后者长度是个问 ...
- C# 实现 Snowflake算法生成唯一性Id
参考地址:https://blog.csdn.net/w200221626/article/details/52064976 /// <summary> /// 动态生产有规律的ID // ...
- java对接申通下单接口示例代码
上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...
- java通过UUID生成16位唯一订单号
import java.util.UUID; public class T { public static String getOrderIdByUUId() { int machineId = 1; ...
随机推荐
- Python的安装图解
安装步骤: 第一步:打开Python官网:http://www.python.org 第二步:点击Download,下载windows版本 第三步:选择要下载的版本第四步:安装到指定的位置第五步:验证 ...
- EasyPR源码剖析(3):车牌定位之颜色定位
一.简介 对车牌颜色进行识别,可能大部分人首先想到的是RGB模型, 但是此处RGB模型有一定的局限性,譬如蓝色,其值是255,还需要另外两个分量都为0,不然很有可能你得到的值是白色.黄色更麻烦,它是由 ...
- douyin-bot-代码
# -*- coding: utf-8 -*- import sys import random import time from PIL import Image if sys.version_in ...
- Asp.net Zero 应用实战-官方示例PhoneBook学习1_修改1版
适用Zero版本:ASP.NET Core & Angular 2+ (aspnet-zero-core-3.1.0). 该版本官方有两个solution文件夹:Angular(前端) 和 a ...
- "tsc.exe"已退出,代码1
公司开发新项目要用到ABP,于是到处在网上找些资料学习,在官网下好了模板(http://aspnetboilerplate.com/Templates),拿下来后用vs(博主用的是vs2013)编译后 ...
- 信息在DNN马尔科夫链结构上的变化
一个经典的全连接神经网络,如下图所示,输入层可以看做T0,输出层可以看做$\hat{\mathrm{Y}}$=TL+1. 考虑每一层隐藏层T与X.Y的交互信息:I(X; Ti), I(Ti, Y),交 ...
- 前端ajax技术之跨域问题解决
这里我使用jquery框架的ajax技术 <script type="text/javascript" src="Assets/js/jquery.min.js&q ...
- 464. Can I Win
https://leetcode.com/problems/can-i-win/description/ In the "100 game," two players take t ...
- APP界面设计 大概总结
APP界面设计大概总结 首先,你得有个Android Studio 其次,你得学会有耐心的对它 最后,要适应它习惯它了解它 来看看APP的基本步骤 先有资源 再是界面布局 下来承载布局Activity ...
- Java:ConcurrentHashMap是弱一致的
本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识.happens-before相关内容参见:JLS §17 ...