java中uuid用法,Java中UUID版本5使用

问题

生成UUID版本5作为唯一ID。某些场景不能依赖数据库来生成唯一ID,就需要使用UUID来生成唯一性ID。

解决

Java

private static final String NAMESPACE_URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";

/**

* Type 5 UUID Generation

*/

public static UUID generateType5UUID(String namespace, String name) {

String source = namespace + name;

byte[] bytes = source.getBytes(StandardCharsets.UTF_8);

return type5UUIDFromBytes(bytes);

}

private static UUID type5UUIDFromBytes(byte[] name) {

MessageDigest md;

try {

md = MessageDigest.getInstance("SHA-1");

} catch (NoSuchAlgorithmException nsae) {

throw new InternalError("SHA-1 not supported", nsae);

}

byte[] bytes = Arrays.copyOfRange(md.digest(name), 0, 16);

bytes[6] &= 0x0f; /* clear version */

bytes[6] |= 0x50; /* set to version 5 */

bytes[8] &= 0x3f; /* clear variant */

bytes[8] |= 0x80; /* set to IETF variant */

return constructType5UUID(bytes);

}

private static UUID constructType5UUID(byte[] data) {

long msb = 0;

long lsb = 0;

assert data.length == 16 : "data must be 16 bytes in length";

for (int i = 0; i < 8; i++)

msb = (msb << 8) | (data[i] & 0xff);

for (int i = 8; i < 16; i++)

lsb = (lsb << 8) | (data[i] & 0xff);

return new UUID(msb, lsb);

}

注意:名称空间标识符本身就是一个 UUID。

参考

文章来源: www.oschina.net,作者:亚林瓜子,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/fxtxz2/blog/3107625

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值