{
private static Random myRand; //基本java随机对象
private static SecureRandom mySecureRand; //安全随机对象
private static String s_id; //ip地址字符串
static
{
mySecureRand = new SecureRandom();
//用安全随机对象产生一随机数并用该随机数初始化基本java随机对象
long secureInitializer = mySecureRand.nextLong();
myRand = new Random(secureInitializer);
try
{
//获得当前主机的ip地址字符串
s_id = InetAddress.getLocalHost().toString();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
}
/**
• 缺省构造器
*/
public GuidGenerator()
{
}
/**
• 缺省的产生随机GUID的方法
• @return 正确返回32字节的字符串,错误则返回长度为零的字符串
*/
public static String genRandomGUID()
{
return genRandomGUID(false);
}
/**
• 产生随机GUID的方法,考虑产生GUID的效率,将来可以应用设计模式,先生成一堆id并缓存
• @param secure true : 带安全选项,用安全随机数对象生成
false : 不带安全选项,用基本随机数对象生成• @return 正确返回32字节的字符串,错误则返回长度为零的字符串
*/
public static String genRandomGUID(boolean secure)
{
String valueBeforeMD5 = “”; //消息消化对象消化前的字符串
String valueAfterMD5 = “”; //经消息消化对象消化后的GUID字符串
MessageDigest md5 = null; //消息消化对象
StringBuffer sbValueBeforeMD5 = new StringBuffer();
try
{
md5 = MessageDigest.getInstance(“MD5”);
}
catch (NoSuchAlgorithmException e)
{
System.out.println("Error: " + e);
return valueBeforeMD5;
}
long time = System.currentTimeMillis(); //获得系统时间
long rand = 0; //随机数
if (secure) //用安全随机对象获得随机数
{
rand = mySecureRand.nextLong();
}
else
//用基本随机对象获得随机数
{
rand = myRand.nextLong();
}
//拼接组成GUID的各个信息
sbValueBeforeMD5.append(s_id);
sbValueBeforeMD5.append(“:”);
sbValueBeforeMD5.append(Long.toString(time));
sbValueBeforeMD5.append(“:”);
sbValueBeforeMD5.append(Long.toString(rand));