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

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

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

    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 都市淘沙者 閱讀(7227) 評(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)論   

    主站蜘蛛池模板: 国产yw855.c免费视频| 亚洲AⅤ无码一区二区三区在线 | A毛片毛片看免费| 亚洲av无码专区国产乱码在线观看| 另类小说亚洲色图| 久草视频免费在线观看| 亚洲人成网77777亚洲色| 青青青视频免费观看| 亚洲va久久久噜噜噜久久狠狠| 国产精品久久久久免费a∨| 色老头综合免费视频| 精品免费国产一区二区| 国产精品免费久久久久影院| 四虎影视永久免费观看地址| 曰批全过程免费视频在线观看无码| 亚洲JIZZJIZZ中国少妇中文| 黄色免费在线网址| 免费吃奶摸下激烈视频| 污污网站免费观看| 黄网站色成年片大免费高清| 18gay台湾男同亚洲男同| 在线观看免费无码视频| 亚洲午夜无码久久久久小说 | 性感美女视频免费网站午夜| 91天堂素人精品系列全集亚洲| 99视频在线精品免费观看6| 国产亚洲福利在线视频| 亚洲中文久久精品无码| 在线免费观看一级毛片| a级毛片免费全部播放无码| 2020国产精品亚洲综合网| 日韩精品福利片午夜免费观着 | 6080午夜一级毛片免费看| 日本视频免费观看| 99久久婷婷国产综合亚洲| 亚洲AV无码乱码在线观看富二代 | 美女黄网站人色视频免费| 亚洲国产成人99精品激情在线| 久久国产亚洲电影天堂| 久久亚洲国产精品123区| 日韩免费视频播播|