GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。

UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID
Java代码 收藏代码
  1. importjava.util.UUID;
  2. publicclassTest{
  3. publicstaticvoidmain(String[]args){
  4. UUIDuuid=UUID.randomUUID();
  5. System.out.println(uuid);
  6. }
  7. }
编译运行输出:
07ca3dec-b674-41d0-af9e-9c37583b08bb


两种方式生成guid 与uuid

需要comm log 库

Java代码 收藏代码
  1. /**
  2. *@authorAdministrator
  3. *
  4. *TODOTochangethetemplateforthisgeneratedtypecommentgoto
  5. *Window-Preferences-Java-CodeStyle-CodeTemplates
  6. */
  7. importjava.net.InetAddress;
  8. importjava.net.UnknownHostException;
  9. importjava.security.MessageDigest;
  10. importjava.security.NoSuchAlgorithmException;
  11. importjava.security.SecureRandom;
  12. importjava.util.Random;
  13. publicclassRandomGUIDextendsObject{
  14. protectedfinalorg.apache.commons.logging.Loglogger=org.apache.commons.logging.LogFactory
  15. .getLog(getClass());
  16. publicStringvalueBeforeMD5="";
  17. publicStringvalueAfterMD5="";
  18. privatestaticRandommyRand;
  19. privatestaticSecureRandommySecureRand;
  20. privatestaticStrings_id;
  21. privatestaticfinalintPAD_BELOW=0x10;
  22. privatestaticfinalintTWO_BYTES=0xFF;
  23. /*
  24. *StaticblocktotakecareofonetimesecureRandomseed.
  25. *IttakesafewsecondstoinitializeSecureRandom.Youmight
  26. *wanttoconsiderremovingthisstaticblockorreplacing
  27. *itwitha"timesincefirstloaded"seedtoreducethistime.
  28. *ThisblockwillrunonlyonceperJVMinstance.
  29. */
  30. static{
  31. mySecureRand=newSecureRandom();
  32. longsecureInitializer=mySecureRand.nextLong();
  33. myRand=newRandom(secureInitializer);
  34. try{
  35. s_id=InetAddress.getLocalHost().toString();
  36. }catch(UnknownHostExceptione){
  37. e.printStackTrace();
  38. }
  39. }
  40. /*
  41. *Defaultconstructor.Withnospecificationofsecurityoption,
  42. *thisconstructordefaultstolowersecurity,highperformance.
  43. */
  44. publicRandomGUID(){
  45. getRandomGUID(false);
  46. }
  47. /*
  48. *Constructorwithsecurityoption.Settingsecuretrue
  49. *enableseachrandomnumbergeneratedtobecryptographically
  50. *strong.SecurefalsedefaultstothestandardRandomfunctionseeded
  51. *withasinglecryptographicallystrongrandomnumber.
  52. */
  53. publicRandomGUID(booleansecure){
  54. getRandomGUID(secure);
  55. }
  56. /*
  57. *MethodtogeneratetherandomGUID
  58. */
  59. privatevoidgetRandomGUID(booleansecure){
  60. MessageDigestmd5=null;
  61. StringBuffersbValueBeforeMD5=newStringBuffer(128);
  62. try{
  63. md5=MessageDigest.getInstance("MD5");
  64. }catch(NoSuchAlgorithmExceptione){
  65. logger.error("Error:"+e);
  66. }
  67. try{
  68. longtime=System.currentTimeMillis();
  69. longrand=0;
  70. if(secure){
  71. rand=mySecureRand.nextLong();
  72. }else{
  73. rand=myRand.nextLong();
  74. }
  75. sbValueBeforeMD5.append(s_id);
  76. sbValueBeforeMD5.append(":");
  77. sbValueBeforeMD5.append(Long.toString(time));
  78. sbValueBeforeMD5.append(":");
  79. sbValueBeforeMD5.append(Long.toString(rand));
  80. valueBeforeMD5=sbValueBeforeMD5.toString();
  81. md5.update(valueBeforeMD5.getBytes());
  82. byte[]array=md5.digest();
  83. StringBuffersb=newStringBuffer(32);
  84. for(intj=0;j<array.length;++j){
  85. intb=array[j]&TWO_BYTES;
  86. if(b<PAD_BELOW)
  87. sb.append('0');
  88. sb.append(Integer.toHexString(b));
  89. }
  90. valueAfterMD5=sb.toString();
  91. }catch(Exceptione){
  92. logger.error("Error:"+e);
  93. }
  94. }
  95. /*
  96. *ConverttothestandardformatforGUID
  97. *(UsefulforSQLServerUniqueIdentifiers,etc.)
  98. *Example:C2FEEEAC-CFCD-11D1-8B05-00600806D9B6
  99. */
  100. publicStringtoString(){
  101. Stringraw=valueAfterMD5.toUpperCase();
  102. StringBuffersb=newStringBuffer(64);
  103. sb.append(raw.substring(0,8));
  104. sb.append("-");
  105. sb.append(raw.substring(8,12));
  106. sb.append("-");
  107. sb.append(raw.substring(12,16));
  108. sb.append("-");
  109. sb.append(raw.substring(16,20));
  110. sb.append("-");
  111. sb.append(raw.substring(20));
  112. returnsb.toString();
  113. }
  114. //Demonstratonandselftestofclass
  115. publicstaticvoidmain(Stringargs[]){
  116. for(inti=0;i<100;i++){
  117. RandomGUIDmyGUID=newRandomGUID();
  118. System.out.println("SeedingString="+myGUID.valueBeforeMD5);
  119. System.out.println("rawGUID="+myGUID.valueAfterMD5);
  120. System.out.println("RandomGUID="+myGUID.toString());
  121. }
  122. }
  123. }


同样

Java代码 收藏代码
  1. UUIDuuid=UUID.randomUUID();
  2. System.out.println("{"+uuid.toString()+"}");


UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。

更多相关文章

  1. 如何判断用户的java代码是否已成功编译?
  2. 如何获得嵌入式Jetty Web服务器来转储其JSP的临时Java代码
  3. 急求用jersey2.x+spring3.x 开发rest webservice Java代码实例
  4. “java.exe”已退出,代码为 1。
  5. Java 编程下的同步代码块(售票员)
  6. JAVA 关于图片上传的代码
  7. 线程“main”中的异常java.lang.RuntimeException:无法编译的源代
  8. java 和 C 代码运行效率的比较(整理)
  9. Java:IntelliJ想法生成的代码错误地为所有Class名称添加了其包名

随机推荐

  1. 认识xml的作用
  2. xml实现多渠道接入网站的构架的方法
  3. xml图像超链接的制作代码
  4. 详解xml型字符串解析时存在& < >符号时的
  5. 具体分析Pull方式解析XML的示例代码
  6. Microsoft.XMLHTTP对象介绍
  7. maven项目不编译xml文件的解决办法
  8. Jaxb2实现Bean与xml互转的示例代码详解
  9. java对象转换为xml格式的示例代码分享
  10. 如何打开xml文件介绍