位置:org.springframework.util
�实现接口:org.springframework.util.IdGenerator
继承类:无
作用:生成随机唯一标识码
一、效果
在系统内生成随机的、密码安全的、唯一的UUID
如:b66049ca-04a9-b53f-8bb2-7a18e8835224
二、API
/**
AlternativeJdkIdGenerator对象初始化无参构造中时生成随机种子
利用随机种子生成随机16位字节数组
对数组前后各八个字节进行位运算,获得高低两个64位数,并作为上下界参数生成UUID
使用示例:
AlternativeJdkIdGenerator generator = new AlternativeJdkIdGenerator();
UUID uuid = generator.generateId();
System.out.println(uuid); >>> b66049ca-04a9-b53f-8bb2-7a18e8835224
*/
public UUID generateId() {
byte[] randomBytes = new byte[16];
this.random.nextBytes(randomBytes);
long mostSigBits = 0;
for (int i = 0; i < 8; i++) {
mostSigBits = (mostSigBits << 8) | (randomBytes[i] & 0xff);
}
long leastSigBits = 0;
for (int i = 8; i < 16; i++) {
leastSigBits = (leastSigBits << 8) | (randomBytes[i] & 0xff);
}
return new UUID(mostSigBits, leastSigBits);
}
三、总结
使用SecureRandom作为初始种子,此后使用Random,而不是像JdkIdGenerator那样每次都调用UUID.randomUUID()。该生成方式在安全的随机ID和性能之间取得更好的平衡。
四、补充
相关资料参考: Random & SecureRandom 原理分析