日期:2014-05-20 浏览次数:21032 次
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);
}
------解决方案--------------------