Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計(jì)

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評(píng)論排行榜

          使用Java生成GUID的類(轉(zhuǎn))

           

          GUID是一個(gè)128位長(zhǎng)的數(shù)字,一般用16進(jìn)制表示。算法的核心思想是結(jié)合機(jī)器的網(wǎng)卡、當(dāng)?shù)貢r(shí)間、一個(gè)隨即數(shù)來(lái)生成GUID。從理論上講,如果一臺(tái)機(jī)器每秒產(chǎn)生10000000個(gè)GUID,則可以保證(概率意義上)3240年不重復(fù)。

          import java.net.*;
          import java.util.*;
          import java.security.*;public class GuidCreator extends Object {

          private String seedingString = “”;
          private String rawGUID = “”;
          private boolean bSecure = false;
          private static Random myRand;
          private static SecureRandom mySecureRand;

          private static String s_id;

          public static final int BeforeMD5 = 1;
          public static final int AfterMD5 = 2;
          public static final int FormatString = 3;

          static {
          mySecureRand = new SecureRandom();
          long secureInitializer = mySecureRand.nextLong();
          myRand = new Random(secureInitializer);
          try {
          s_id = InetAddress.getLocalHost().toString();
          } catch (UnknownHostException e) {
          e.printStackTrace();
          }
          }

          /*
          * Default constructor. With no specification of security option,
          * this constructor defaults to lower security, high performance.
          */
          public GuidCreator() { }

          /*
          * Constructor with security option. Setting secure true
          * enables each random number generated to be cryptographically
          * strong. Secure false defaults to the standard Random function seeded
          * with a single cryptographically strong random number.
          */
          public GuidCreator(boolean secure) {
          bSecure = secure;
          }

          /*
          * Method to generate the random GUID
          */
          private void getRandomGUID(boolean secure) {
          MessageDigest md5 = null;
          StringBuffer sbValueBeforeMD5 = new StringBuffer();

          try {
          md5 = MessageDigest.getInstance(”MD5″);
          } catch (NoSuchAlgorithmException e) {
          System.out.println(”Error: ” + e);
          }

          try {
          long time = System.currentTimeMillis();
          long rand = 0;

          if (secure) {
          rand = mySecureRand.nextLong();
          } else {
          rand = myRand.nextLong();
          }

          // This StringBuffer can be a long as you need; the MD5
          // hash will always return 128 bits. You can change
          // the seed to include anything you want here.
          // You could even stream a file through the MD5 making
          // the odds of guessing it at least as great as that
          // of guessing the contents of the file!
          sbValueBeforeMD5.append(s_id);
          sbValueBeforeMD5.append(”:”);
          sbValueBeforeMD5.append(Long.toString(time));
          sbValueBeforeMD5.append(”:”);
          sbValueBeforeMD5.append(Long.toString(rand));

          seedingString = sbValueBeforeMD5.toString();
          md5.update(seedingString.getBytes());

          byte[] array = md5.digest();
          StringBuffer sb = new StringBuffer();
          for (int j = 0; j < array.length; ++j) {
          int b = array[j] & 0xFF;
          if (b < 0×10) sb.append(’0′);
          sb.append(Integer.toHexString(b));
          }

          rawGUID = sb.toString();

          } catch (Exception e) {
          System.out.println(”Error:” + e);
          }
          }

          public String createNewGuid(int nFormatType, boolean secure) {
          getRandomGUID(secure);
          String sGuid = “”;
          if (BeforeMD5 == nFormatType) {
          sGuid = this.seedingString;
          } else if (AfterMD5 == nFormatType) {
          sGuid = this.rawGUID;
          } else {
          sGuid = this.toString();
          }
          return sGuid;
          }

          public String createNewGuid(int nFormatType) {
          return this.createNewGuid(nFormatType, this.bSecure);
          }

          /*
          * Convert to the standard format for GUID
          * (Useful for SQL Server UniqueIdentifiers, etc.)
          * Example: C2FEEEAC-CFCD-11D1-8B05-00600806D9B6
          */
          public String toString() {
          String raw = rawGUID.toUpperCase();
          StringBuffer sb = new StringBuffer();
          sb.append(raw.substring(0, 8));
          sb.append(”-”);
          sb.append(raw.substring(8, 12));
          sb.append(”-”);
          sb.append(raw.substring(12, 16));
          sb.append(”-”);
          sb.append(raw.substring(16, 20));
          sb.append(”-”);
          sb.append(raw.substring(20));

          return sb.toString();
          }
          }

          /**
          * Use Exceple
          * public static void main(String args[]) {
          * for (int i=0; i< 100; i++) {
          * GuidCreator myGUID = new GuidCreator();
          * System.out.println(”Seeding String=” + myGUID.getNewGuid(GuidCreator.BeforeMD5));
          * System.out.println(”rawGUID=” + myGUID.getNewGuid(GuidCreator.AfterMD5));
          * System.out.println(”RandomGUID=” + myGUID.getNewGuid(GuidCreator.FormatString));
          * }
          * }
          */

          本方源于互聯(lián)網(wǎng),但已經(jīng)過(guò)作者自己的修改,更易于使用

          posted on 2007-11-17 23:31 都市淘沙者 閱讀(7228) 評(píng)論(3)  編輯  收藏 所屬分類: Java Basic/Lucene/開(kāi)源資料

          評(píng)論

          # re: 使用Java生成GUID的類(轉(zhuǎn)) 2010-07-24 10:43 旺才

          也不知道博主有沒(méi)有測(cè)試,“if (b < 0×10) sb.append(’0′);” 中的“×”應(yīng)該是什么符號(hào)呢?編譯通不過(guò)  回復(fù)  更多評(píng)論   

          # re: 使用Java生成GUID的類(轉(zhuǎn))[未登錄](méi) 2010-11-04 16:05 jacky

          @旺才
          if(b<0x10) 這個(gè)表示16進(jìn)制的10

          樓主的代碼中有不少錯(cuò)誤,一些引號(hào)和單引號(hào)都是全角的  回復(fù)  更多評(píng)論   

          # re: 使用Java生成GUID的類(轉(zhuǎn))[未登錄](méi) 2010-12-15 14:02 zy

          樓主是抄來(lái)的了!uuid飄過(guò)。。。  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 全州县| 乐陵市| 汝城县| 八宿县| 攀枝花市| 汪清县| 来凤县| 吴堡县| 喀什市| 奉化市| 七台河市| 沙坪坝区| 恭城| 勃利县| 长丰县| 张家港市| 神木县| 岳池县| 茌平县| 藁城市| 阿瓦提县| 凤庆县| 亳州市| 久治县| 钟祥市| 安平县| 瓮安县| 隆回县| 平利县| 巴彦淖尔市| 安泽县| 泰安市| 贵港市| 伊宁市| 怀柔区| 松阳县| 万载县| 芜湖县| 淮北市| 普陀区| 巴林左旗|