本文目录导读:

我来介绍几种Java UUID工具的封装方式:
基础封装工具类
import java.util.UUID;
public class UUIDUtil {
/**
* 生成标准UUID(带横线)
*/
public static String getUUID() {
return UUID.randomUUID().toString();
}
/**
* 生成不带横线的UUID
*/
public static String getSimpleUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 生成指定长度的唯一字符串
*/
public static String getUUID(int length) {
if (length <= 0) {
throw new IllegalArgumentException("长度必须大于0");
}
String uuid = getSimpleUUID();
if (length >= uuid.length()) {
return uuid;
}
return uuid.substring(0, length);
}
/**
* 生成批量UUID
*/
public static List<String> getUUIDList(int count) {
List<String> list = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
list.add(getUUID());
}
return list;
}
}
带格式的UUID工具类
import java.util.UUID;
public class FormatUUIDUtil {
/**
* 生成大写UUID
*/
public static String getUpperUUID() {
return UUID.randomUUID().toString().toUpperCase();
}
/**
* 生成小写UUID
*/
public static String getLowerUUID() {
return UUID.randomUUID().toString().toLowerCase();
}
/**
* 生成自定义格式UUID
* format: 使用{x}占位符,x为0-4的数字
*/
public static String getFormatUUID(String format) {
String uuid = UUID.randomUUID().toString();
String[] parts = uuid.split("-");
StringBuilder sb = new StringBuilder(format);
for (int i = 0; i < parts.length; i++) {
String placeholder = "{" + i + "}";
int index = sb.indexOf(placeholder);
while (index != -1) {
sb.replace(index, index + placeholder.length(), parts[i]);
index = sb.indexOf(placeholder, index + parts[i].length());
}
}
return sb.toString();
}
}
带时间戳的UUID
import java.util.UUID;
public class TimestampUUIDUtil {
/**
* 生成带时间戳的UUID
*/
public static String getTimestampUUID() {
String timestamp = String.valueOf(System.currentTimeMillis());
String uuid = UUID.randomUUID().toString().replace("-", "");
return timestamp + uuid;
}
/**
* 生成带日期格式的UUID
*/
public static String getDateUUID() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String dateStr = sdf.format(new Date());
String uuid = UUID.randomUUID().toString().replace("-", "");
return dateStr + uuid.substring(uuid.length() - 12);
}
/**
* 生成可排序的UUID
*/
public static String getSortableUUID() {
long now = System.currentTimeMillis();
long random = (long) (Math.random() * 1000000);
String uuid = UUID.randomUUID().toString().replace("-", "");
return Long.toHexString(now) + Long.toHexString(random) + uuid.substring(0, 8);
}
}
业务场景专用工具类
import java.util.UUID;
public class BusinessUUIDUtil {
/**
* 生成订单号
*/
public static String getOrderNo() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String dateStr = sdf.format(new Date());
String uuid = UUID.randomUUID().toString().replace("-", "");
return "ORD" + dateStr + uuid.substring(0, 8);
}
/**
* 生成用户ID
*/
public static String getUserId() {
return "U" + System.currentTimeMillis() +
UUID.randomUUID().toString().replace("-", "").substring(0, 8);
}
/**
* 生成文件名称
*/
public static String getFileName(String extension) {
return UUID.randomUUID().toString().replace("-", "") + "." + extension;
}
/**
* 生成短ID(8位)
*/
public static String getShortId() {
return UUID.randomUUID().toString().replace("-", "").substring(0, 8);
}
}
完整工具类示例
import java.util.UUID;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
public final class UUIDHelper {
private UUIDHelper() {
// 私有构造函数,防止实例化
}
/**
* 生成UUID
*/
public static String generate(boolean withHyphen) {
String uuid = UUID.randomUUID().toString();
return withHyphen ? uuid : uuid.replace("-", "");
}
/**
* 生成带前缀的UUID
*/
public static String generateWithPrefix(String prefix) {
return prefix + generate(false);
}
/**
* 生成带格式的UUID
*/
public static String generateWithFormat(UUIDFormat format) {
switch (format) {
case TIMESTAMP:
return System.currentTimeMillis() + generate(false).substring(0, 12);
case DATE:
return new SimpleDateFormat("yyyyMMdd").format(new Date()) + generate(false);
case SEQUENCE:
return generate(false).toUpperCase();
case RANDOM:
return generate(true);
default:
return generate(false);
}
}
public enum UUIDFormat {
TIMESTAMP, DATE, SEQUENCE, RANDOM
}
}
使用示例
public class UUIDExample {
public static void main(String[] args) {
// 基本使用
String uuid1 = UUIDUtil.getUUID();
String uuid2 = UUIDUtil.getSimpleUUID();
String uuid3 = UUIDUtil.getUUID(16);
System.out.println("标准UUID: " + uuid1);
System.out.println("简单UUID: " + uuid2);
System.out.println("指定长度: " + uuid3);
// 业务使用
BusinessUUIDUtil util = new BusinessUUIDUtil();
System.out.println("订单号: " + util.getOrderNo());
System.out.println("用户ID: " + util.getUserId());
System.out.println("文件名: " + util.getFileName("txt"));
// 格式使用
String customFormat = FormatUUIDUtil.getFormatUUID("{0}-{1}-{2}-{3}-{4}");
System.out.println("自定义格式: " + customFormat);
}
}
性能优化建议
public class OptimizedUUIDUtil {
private static final SecureRandom RANDOM = new SecureRandom();
/**
* 高效生成UUID(减少对象创建)
*/
public static String fastUUID() {
byte[] randomBytes = new byte[16];
RANDOM.nextBytes(randomBytes);
// 设置版本4
randomBytes[6] &= 0x0f;
randomBytes[6] |= 0x40;
// 设置变体
randomBytes[8] &= 0x3f;
randomBytes[8] |= 0x80;
StringBuilder sb = new StringBuilder(36);
for (int i = 0; i < 16; i++) {
if (i == 4 || i == 6 || i == 8 || i == 10) {
sb.append('-');
}
sb.append(String.format("%02x", randomBytes[i]));
}
return sb.toString();
}
}
这些封装方式可以根据具体业务需求选择使用,建议:
- 通用场景:使用基础的
UUIDUtil类 - 业务需求:使用专业的
BusinessUUIDUtil - 性能要求:使用优化的
OptimizedUUIDUtil - 格式化需求:使用
FormatUUIDUtil