位置:org.springframework.util
�实现接口:org.springframework.util.IdGenerator
继承类:无
作用:生成随机唯一标识码

一、效果

在系统内生成随机的、密码安全的、唯一的UUID
如:b66049ca-04a9-b53f-8bb2-7a18e8835224

二、API

  1. /**
  2. AlternativeJdkIdGenerator对象初始化无参构造中时生成随机种子
  3. 利用随机种子生成随机16位字节数组
  4. 对数组前后各八个字节进行位运算,获得高低两个64位数,并作为上下界参数生成UUID
  5. 使用示例:
  6. AlternativeJdkIdGenerator generator = new AlternativeJdkIdGenerator();
  7. UUID uuid = generator.generateId();
  8. System.out.println(uuid); >>> b66049ca-04a9-b53f-8bb2-7a18e8835224
  9. */
  10. public UUID generateId() {
  11. byte[] randomBytes = new byte[16];
  12. this.random.nextBytes(randomBytes);
  13. long mostSigBits = 0;
  14. for (int i = 0; i < 8; i++) {
  15. mostSigBits = (mostSigBits << 8) | (randomBytes[i] & 0xff);
  16. }
  17. long leastSigBits = 0;
  18. for (int i = 8; i < 16; i++) {
  19. leastSigBits = (leastSigBits << 8) | (randomBytes[i] & 0xff);
  20. }
  21. return new UUID(mostSigBits, leastSigBits);
  22. }

三、总结

使用SecureRandom作为初始种子,此后使用Random,而不是像JdkIdGenerator那样每次都调用UUID.randomUUID()。该生成方式在安全的随机ID和性能之间取得更好的平衡。

四、补充

相关资料参考: Random & SecureRandom 原理分析