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