Java做到16位随机码变化转载
原创在实际工程中遇到了需要生成的唯一的非重复项。16位随机码问题,随机码还需要包含数字和大小写的英文字母。16比特,以确保全局唯一随机码更弱32如果使用机器代码,则返回bit方法。+时间戳+在随机码方面,数字的数量已经捉襟见肘。如果位数不够,它只能依靠随机生成的方法来使产品可用。16位随机码,所以使用java中的 SecureRandom
强随机函数实现值逻辑,网上提到的生成随机数的方法主要有三种:
- Math.random 随机数
- java.util.Random 伪随机数(由线性同余方法产生)
- java.security.SecureRandom 真随机数
使用类似于统计的随机数生成规则的随机数,其输出很容易预测,因此可能导致被攻击者攻击。使用类似于密码学的随机数生成规则的真随机数更难预测,如果您想要防止攻击者攻击,最好使攻击者无法或不可能识别生成的随机值和真随机值。在商业上,这里也使用了第三代方法,可以承受生产行业的普遍推荐,具有很强的随机性。16位随机码的实现:
/**
* 生成16不重复比特的随机数,包括数。+大小写
* @return
*/
public static String getGUID() {
StringBuilder uid = new StringBuilder();
//产生16强随机比特数
Random rd = new SecureRandom();
for (int i = 0; i < 16; i++) {
//产生0-2的3位随机数
int type = rd.nextInt(3);
switch (type){
case 0:
//0-9的随机数
uid.append(rd.nextInt(10));
break;
case 1:
//ASCII在65-90在资本之间,获取资本随机
uid.append((char)(rd.nextInt(25)+65));
break;
case 2:
//ASCII在97-122之间是小写,取小写随机。
uid.append((char)(rd.nextInt(25)+97));
break;
default:
break;
}
}
return uid.toString();
}
实际执行100剥离周期大约需要6ms,每篇文章的性能大致0.06ms在高并发环境下,效率可以得到保证,但很难保证随机数在海量数据强唯一性的情况下,可能存在一定的碰撞概率,虽然这个概率不是太大。
17人点赞
作者:YitaiCloud
链接:https://www.jianshu.com/p/7a64094a01ee
资料来源:简讯
版权归作者所有。请联系作者以获得商业转载的授权,并注明非商业转载的来源。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除