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

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

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

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

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

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

    友情連接

    閱讀排行榜

    評論排行榜

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

     

    GUID是一個128位長的數(shù)字,一般用16進(jìn)制表示。算法的核心思想是結(jié)合機(jī)器的網(wǎng)卡、當(dāng)?shù)貢r間、一個隨即數(shù)來生成GUID。從理論上講,如果一臺機(jī)器每秒產(chǎn)生10000000個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)過作者自己的修改,更易于使用

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

    評論

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

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

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

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

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

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

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

    主站蜘蛛池模板: 91精品啪在线观看国产线免费| 亚洲人成电影福利在线播放| 亚洲精品无码久久久久久久| 一区二区三区免费精品视频| 在线精品免费视频无码的| 亚洲AV无码久久精品成人| eeuss草民免费| 2048亚洲精品国产| 色网站在线免费观看| 免费激情视频网站| 亚洲国产精品ⅴa在线观看| 99久久99久久精品免费看蜜桃| 亚洲AV日韩AV鸥美在线观看| a级毛片毛片免费观看永久| 亚洲人成无码网WWW| yellow视频免费看| 青青草原亚洲视频| 亚洲a一级免费视频| 亚洲婷婷天堂在线综合| 大地资源免费更新在线播放| 亚洲国产成人精品无码区二本| 女人18特级一级毛片免费视频| 国产精品亚洲一区二区在线观看 | 亚洲av丰满熟妇在线播放| 久久精品电影免费动漫| 亚洲欧洲国产视频| 成人免费无码精品国产电影| xxxx日本在线播放免费不卡| 亚洲色大成网站WWW久久九九| 免费播放在线日本感人片| 亚洲最新中文字幕| 日韩黄色免费观看| 无码人妻久久一区二区三区免费| 亚洲国产成人九九综合| 亚洲国产电影av在线网址| 91视频免费网址| 精品女同一区二区三区免费播放| 亚洲AV综合色区无码一区爱AV| 18勿入网站免费永久| 国产精品高清免费网站| 亚洲an日韩专区在线|