JAVA 生成无重复8位随机码

原创:http://blog.csdn.net/andy_miao858/article/details/9530245


短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个。

本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62操作,结果作为索引取出字符,

这样重复率大大降低。


经测试,在生成一千万个数据也没有出现重复,完全满足大部分需求。

代码贴出来供大家参考。


[java]  view plain  copy
  1. public static String[] chars = new String[] { "a""b""c""d""e""f",  
  2.             "g""h""i""j""k""l""m""n""o""p""q""r""s",  
  3.             "t""u""v""w""x""y""z""0""1""2""3""4""5",  
  4.             "6""7""8""9""A""B""C""D""E""F""G""H""I",  
  5.             "J""K""L""M""N""O""P""Q""R""S""T""U""V",  
  6.             "W""X""Y""Z" };  
  7.   
  8.   
  9. public static String generateShortUuid() {  
  10.     StringBuffer shortBuffer = new StringBuffer();  
  11.     String uuid = UUID.randomUUID().toString().replace("-""");  
  12.     for (int i = 0; i < 8; i++) {  
  13.         String str = uuid.substring(i * 4, i * 4 + 4);  
  14.         int x = Integer.parseInt(str, 16);  
  15.         shortBuffer.append(chars[x % 0x3E]);  
  16.     }  
  17.     return shortBuffer.toString();  
  18.   
  19. }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值