当前位置: 代码迷 >> Java Web开发 >> 获取18位的不会反复的随机数,(0-9正整数的数字
  详细解决方案

获取18位的不会反复的随机数,(0-9正整数的数字

热度:8208   发布时间:2013-02-25 21:08:18.0
获取18位的不会重复的随机数,(0-9正整数的数字
如题,想通过一个方法获取一个18位的不会重复的随机数(0-9正整数的数字),大家有没有直接获取的方法,借来一用~~
------最佳解决方案--------------------------------------------------------
public static String getRandomString(int length) {   
      length = length < 0 ? -length : length;        
      char[] chs = new char[length];       
  Random ran = new Random();        
 for(int i = 0; i < chs.length; i++) {          
   chs[i] = (char)(ran.nextInt(10) + '0');     
    }        
 return new String(chs);     
}

生成过的随机数放入一个HashSet,生成随机数的时候,调用上面的方法,并从这个HashSet里面判断是否已存在,如果存在,则再调用上面的方法生成随机数
------其他解决方案--------------------------------------------------------
基本上就几种套路:
1、预先生成的伪随机数,比如预先生成 10W 个顺序数,然后再将其打乱后依次读取;
2、记录所有已生成,防止重复;这个对存储有较高开销要求;
3、用不重复数经过运算得到不重复的伪随机数,比如最简单就是9位流水号+9位随机数,然后间隔着混排。
------其他解决方案--------------------------------------------------------
什么叫不会重复是刚生成与现在生成的不重复呢还是永远不重复。如果是永远不重复是不可能的因为18位数字的排列
组合是有限的。
------其他解决方案--------------------------------------------------------
用时间格式化,这样生成的数字就不会重复了.
------其他解决方案--------------------------------------------------------
000000000000000001
这样的算不?
------其他解决方案--------------------------------------------------------
引用:
什么叫不会重复是刚生成与现在生成的不重复呢还是永远不重复。如果是永远不重复是不可能的因为18位数字的排列
组合是有限的。



就是跟生成过的18位数的不同,当然也有限制比如10000000条不同。
跟手机号密码似地
------其他解决方案--------------------------------------------------------
如果 是每天 生成的 随机数不同的话, 可以  用 当天 的 年月日时分秒(yyyyMMddHHmmss)加上其他就行了吧。。。(比如操作人的Id),进一步判断。。。
  相关解决方案