日期:2014-05-20 浏览次数:20889 次
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楼的算比较不错了,虽然从逻辑上来说存在重复可能,但应该非常非常非常低了。
另外刚才还少问了一个问题,你是集群环境还是非集群环境?
------解决方案--------------------
额,大牛请问为什么会有重复的情况?
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());
------解决方案--------------------
注释忘了修改。抱歉
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());
------解决方案--------------------
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); }
------解决方案--------------------
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); }
------解决方案--------------------