<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    使用Java生成GUID的類(轉)

     

    GUID是一個128位長的數字,一般用16進制表示。算法的核心思想是結合機器的網卡、當地時間、一個隨即數來生成GUID。從理論上講,如果一臺機器每秒產生10000000個GUID,則可以保證(概率意義上)3240年不重復。

    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));
    * }
    * }
    */

    本方源于互聯網,但已經過作者自己的修改,更易于使用

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

    評論

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

    也不知道博主有沒有測試,“if (b < 0×10) sb.append(’0′);” 中的“×”應該是什么符號呢?編譯通不過  回復  更多評論   

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

    @旺才
    if(b<0x10) 這個表示16進制的10

    樓主的代碼中有不少錯誤,一些引號和單引號都是全角的  回復  更多評論   

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

    樓主是抄來的了!uuid飄過。。。  回復  更多評論   

    主站蜘蛛池模板: h视频在线免费观看| 自怕偷自怕亚洲精品| 亚洲欧美日韩中文高清www777| 国产在线国偷精品免费看| 成人亚洲综合天堂| 亚洲乱人伦中文字幕无码| 国产精品1024永久免费视频| 亚洲日本一区二区| 91人人区免费区人人| 亚洲免费视频网站| 亚洲国产精品成人久久| 国产做床爱无遮挡免费视频| 国产成人免费高清在线观看| 亚洲一区二区三区写真| 成年性生交大片免费看| 亚洲中文字幕久久精品无码VA| 国产卡二卡三卡四卡免费网址 | 亚洲人成网77777亚洲色| 成人特级毛片69免费观看| 亚洲一级片内射网站在线观看| 亚洲精品偷拍视频免费观看| 中文字幕无码精品亚洲资源网| 黄色网址免费在线观看| 亚洲AV无码一区东京热久久| 97青青草原国产免费观看| 亚洲国产精品yw在线观看| 影音先锋在线免费观看| 国产成人精品久久亚洲高清不卡| 国产精品视频免费一区二区三区 | 亚洲AV色无码乱码在线观看| 国产精品成人无码免费| 特级av毛片免费观看| 亚洲日韩精品A∨片无码| 99re免费视频| 亚洲精品无码你懂的| 亚洲国产成人久久笫一页| 日本免费在线观看| 亚洲国产精品免费观看| 亚洲欧洲中文日韩久久AV乱码 | 免费国产成人高清在线观看网站| 亚洲熟妇成人精品一区|