Java中生成唯一ID的方法

本文介绍了在Java中生成全局唯一ID的几种方法,包括UUID、随机数的哈希值和Twitter的Snowflake算法。UUID提供简单但较长的ID,哈希值方法利用SecureRandom和MessageDigest,而Snowflake算法则适用于分布式系统,生成64位的long型ID。
摘要由CSDN通过智能技术生成

有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID。

UUID
从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法。UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的DCE(Distributed Computing Environment,分布式计算环境)规范。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。

UUID是一个128bit的数字,也可以表现为32个16进制的字符(每个字符0-F的字符代表4bit),中间用"-"分割。

时间戳+UUID版本号: 分三段占16个字符(60bit+4bit),
Clock Sequence号与保留字段:占4个字符(13bit+3bit),
节点标识:占12个字符(48bit),
UUID的唯一缺陷在于生成的结果串会比较长。

public class GenerateUUID {
public static final void main(String… args) {
// generate random UUIDs
UUID idOne = UUID.randomUUID();
UUID idTwo = UUID.randomUUID();
log("UUID One: " + idOne);
log("UUID Two: " + idTwo);
}

private static void log(Object object) {
    System.out.println(String.valueOf(object));
}

}
结果为

UUID One: 6b193443-b95d-4462-9902-a6455ebc56d6
UUID Two: 4ef9b375-839b-4150-8f31-1ed85fab63fd
随机数的哈希值
此方法使用SecureRandom和MessageDigest:

启动时,初始化SecureRandom (这可能是一个冗长的操作)
使用 SecureRandom生成一个随机数
创建一个MessageDigest,使用某种摘要算法
将MessageDigest返回的byte[]编码为某种可接受的文本形式
检查结果是否已经被使用;如果尚未使用,则适合作为唯一标识符
MessageDigest类是适合于产生任意数据的“单向散列”。

public class GenerateId {
public static void main(String… arguments) {
try {
Secure

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值