大家好:
如何生产22位不重复随机数,可以数字字母组合,不能够重复,谢谢!
------解决方案--------------------
是否允许发生极其少量重复?比如十万个里面可能重复1个,还是绝对禁止发生重复?
------解决方案--------------------
- Java code
char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'}; String tStr = String.valueOf(System.currentTimeMillis()); System.out.println(tStr); StringBuilder sb = new StringBuilder(); /*从当前时间的毫秒获取12位数*/ for(int i=1;i<tStr.length();i++) sb.append(letters[tStr.charAt(i)-'0']); /*随机生成另外十位,由于前面的12位数不可能重复,所以生成的串是不重复的*/ for(int i=0;i<10;i++) sb.append(letters[(int) (Math.random()*10)]); System.out.println(sb.toString());
------解决方案--------------------
3楼的算比较不错了,虽然从逻辑上来说存在重复可能,但应该非常非常非常低了。
另外刚才还少问了一个问题,你是集群环境还是非集群环境?
------解决方案--------------------
额,大牛请问为什么会有重复的情况?
------解决方案--------------------
那把毫秒数全用上吧。
- Java code
char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'}; String tStr = String.valueOf(System.currentTimeMillis()); StringBuilder sb = new StringBuilder(); /*从当前时间的毫秒获取12位数*/ for(int i=0;i<tStr.length();i++) sb.append(letters[tStr.charAt(i)-'0']); /*随机生成另外十位,由于前面的12位数不可能重复,所以生成的串是不重复的*/ for(int i=0;i<9;i++) sb.append(letters[(int) (Math.random()*10)]); System.out.println(sb.toString());
------解决方案--------------------
注释忘了修改。抱歉
- Java code
char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'}; String tStr = String.valueOf(System.currentTimeMillis()); StringBuilder sb = new StringBuilder(); /*从当前时间的毫秒获取13位数*/ for(int i=0;i<tStr.length();i++) sb.append(letters[tStr.charAt(i)-'0']); /*随机生成另外九位,由于前面的13位数不可能重复,所以生成的串是不重复的*/ for(int i=0;i<9;i++) sb.append(letters[(int) (Math.random()*10)]); System.out.println(sb.toString());
------解决方案--------------------
- Java code
boolean flag=false; StringBuilder sb = new StringBuilder();char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};for(int i=0;i<22;i++){ do{ int temp=(int)(Math.random()*letters.length()); sb.append(letters[temp]); for(int i=0;i<sb.length();i++){ if(letters[temp]==(sb.charAt(i))){ flag=true; break; } flag=false; } }while(flag);}
------解决方案--------------------
- Java code
boolean flag=false; StringBuilder sb = new StringBuilder();char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};for(int i=0;i<22;i++){ do{ int temp=(int)(Math.random()*letters.length()); sb.append(letters[temp]); for(int i=0;i<sb.length();i++){ if(letters[temp]==(sb.charAt(i))){ flag=true; sb.deletecharAt(i);//如果加进去的是重复的,就删除它 break; } flag=false; } }while(flag);}
------解决方案--------------------