提供两种id生成方式分别可以生成数字编码和字母加数字混合编码可以满足不同的应用场景,一种基于时间戳+随机数方式对于id识别要求长度短或数字需求比较适合,另外一种组合时间戳(纳秒级)+全局唯一的IEEE机器识别号(MAC..)+时钟序列(自增序列数)+随机数(Random 子类 SecureRandom 强伪随机数据类产生(全球唯一码,时间空间的唯一性,适用于持久化数据id、序列sequence等要求比较高id识别场景),代码如下
package com.xwood.util;@b@@b@import java.util.UUID;@b@@b@/**@b@ * 用于生成ID的工具类@b@ * @author nijun@b@ */@b@public class IdUtils {@b@ @b@ /**@b@ * 获取固定长度的字符串,长度不够在前面补充0@b@ * @b@ * @param str@b@ * @param length@b@ * @return@b@ */@b@ public static String getFixedLengthStr(String str, int length) {@b@ if (str==null||"".equals(str)) {@b@ return null;@b@ }@b@ if (str.length() < length) {@b@ for (int i = 0; i < length; i++) {@b@ str = "0" + str;@b@ if (str.length() == length) {@b@ break;@b@ }@b@ }@b@ }@b@ return str;@b@ } @b@ @b@ /**@b@ * 全球唯一码,时间空间的唯一性,@b@ * 根据时间戳(纳秒级)+全局唯一的IEEE机器识别号(MAC..)+时钟序列(自增序列数)+随机数(Random 子类 SecureRandom 强伪随机数据类产生)@b@ * @param idPrefix @b@ * @return@b@ */@b@ public static String generate(String idPrefix) {@b@ return idPrefix + UUID.randomUUID().toString();@b@ }@b@@b@@b@ /**@b@ * 时间戳+随机数(w级)@b@ * @param idPrefix@b@ * @return@b@ */@b@ public static String generateId(String idPrefix) {@b@ String str = (int) (Math.random() * 10000) + "";@b@ return idPrefix + System.currentTimeMillis() + getFixedLengthStr(str, 4);@b@ }@b@ @b@ public static void main(String[] args) {@b@ System.out.println(IdUtils.generate(""));@b@ System.out.println(IdUtils.generateId(""));@b@ }@b@ @b@}
运行结果
beded500-10c4-44e4-904e-4da9d95c7df7@b@14721208909925999