Java产生唯一的随机数

7 篇文章 0 订阅

Java产生唯一的随机数

说起唯一的随机数,可能很容易想到java.util.UUID,如下,可以产生32位长度的字符串。

String str = UUID.randomUUID().toString().replaceAll("-", "");

但是这样并不是一定没问题的,单机多线程的情况下也可能出现重复的情况。

UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得)。

为确保产生的字符串唯一,可在uuid后加一个随机数,如果再能加唯一用户名,电话xxx的就更加万无一失了。

String str = UUID.randomUUID().toString().replaceAll("-", "") + new Random().nextLong();
// 产生的字符串太长,浪费存储,再进行MD5
// 可以使用apache的org.apache.commons.codec.digest.DigestUtils
// 也可以是使用java.security.MessageDigest进行加密
// 注意返回的是长度为16的byte数组,使用Hex转换成32的char数组,在转成字符串
String uuid = new String(Hex.encodeHex(DigestUtils.md5(str)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值