package test.demo;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
String id = createUUID();
System.out.println(id);
}
/**
* 生成UUID
* @return String UUID
*/
@SuppressWarnings("deprecation")
private static String createUUID() {
// 生成1~16的UUID
Date dg = new Date(1582, 10, 15, 0, 0, 0);
Date dc = new Date();
long t = dg.getTime() - dc.getTime();
String tl = getIntegerBits(t, 0, 31);
String tm = getIntegerBits(t, 32, 47);
String thv = getIntegerBits(t, 48, 59) + '1';
// 生成17~20的UUID
String csar = getIntegerBits(rand(4095), 0, 7);
String csl = getIntegerBits(rand(4095), 0, 7);
// 生成21~32的UUID
String n = getIntegerBits(rand(8191), 0, 7) +
getIntegerBits(rand(8191), 8, 15) +
getIntegerBits(rand(8191), 0, 7) +
getIntegerBits(rand(8191), 8, 15) +
getIntegerBits(rand(8191), 0, 15);
// 生成UUID
String uuid = tl + "-" + tm + "-" + thv + "-" + csar + csl + "-" + n;
return uuid;
}
/**
* 作成指定长度的字符串
*
* @param val 字符串
* @param start 起始索引
* @param end 结束索引
* @returns String 指定サイズの文字列
*/
private static String getIntegerBits(long val, int start, int end) {
// 把文字列转换成16进制
String base16 = asHex(val, 16);
List<String> list = new ArrayList<String>(32);
// 初始化返回值
String quadString = "";
// 把16进制的文字列依次放入List中
for (int i = 0; i < base16.length(); i++) {
list.add(base16.substring(i,i+1));
}
// 生成指定位数的文字列
for (int i = (int) Math.floor(start / 4); i <= Math.floor(end / 4); i++) {
try {
if (list.get(i) == null || list.get(i) == "") {
quadString += '0';
} else {
quadString += list.get(i);
}
} catch (IndexOutOfBoundsException e) {
quadString += '0';
}
}
// 返回指定位数的文字列
return quadString;
};
/**
* 16进制转换(Long)
*
*/
private static String asHex(long fieldNo, int base) {
return Long.toString(fieldNo, base).toUpperCase();
}
/**
* 生成随机数
* @param max 随机数的上限值
* @return String 生成的随机数
*/
private static long rand(int max) {
// 生成随机数并返回
return (long)Math.floor(Math.random() * (max + 1));
};
}
根据日期和随机数生成32位的16进制随机数
最新推荐文章于 2025-03-30 00:15:00 发布