package cn.ffcs.ct10000.card;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;public class TTEST {
public static String getCurrStrTime(int type){
Date date = new Date();
DateFormat formatter = null;
if(type == 1){
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}else if(type == 2){
formatter = new SimpleDateFormat("yyyy-MM"); //检查每月一次的业务
}else if(type == 3){
formatter = new SimpleDateFormat("yyyyMMddHHmmss");
}else{
//默认
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}

return formatter .format(date);
}


public static String getSno() {
Random rdm = new Random();
int i = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(i).substring(1,7);
return str;

}
public static void suijishu(){
//获得一个从100000到999999之间的整数
Random rdm = new Random();
for(int i=0; i<1000;i++){
int j;
j = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(j).substring(1,7);
System.out.println(str);
}
}


public static void t1(){
for(int i=0;i<100;i++){
String sno = getSno();
if(sno.length() != 2){
System.out.println(sno);
}
}
}

public static void t2(){
suijishu();
}
/**
 * @param args
 */
public static void main(String[] args) {// t1();
t2();
}}
==============
为什么t1()就会出现很多一样的号码,而t2()则几乎每次出来的数都不一样?
难道我用getSno()来取得一个随机数,取到一样id的情况很多吗?
请高人指点!

解决方案 »

  1.   

    java的 Random返回的是一个伪随机数。如果要保证不同,可以使用当前时间作为随机种子。
      

  2.   

    使用 common.lang  String str = RandomStringUtils.random(16, true, true);产生一个16为的数字与字母结合的uuid
      

  3.   

    java的 Random返回的是一个伪随机数。
    产生的随机数是否相同取决于随机数对象的状态,而随机数对象的状态取决于它们是否是同一个随机数对象。
     Random rdm = new Random();表示创建一个随机数对象,所以用rdm来产生的随机数都一样,除非重新创建新的随机数对象。t1()只创建一次随机数对象,后面产生的随机数都是用到第一次创建的随机数对象,所以结果都相同。
    而t2()采取调用suijishu();的方式来产生随机数,每调用一次suijishu();就创建一个新的随机数对象,所以肌肤每次都不同。