<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ù)  更多評論   

    主站蜘蛛池模板: 乱人伦中文视频在线观看免费| 久久精品网站免费观看| 亚洲精品无码不卡在线播放| 亚洲αv在线精品糸列| 哒哒哒免费视频观看在线www| 中文字幕无码播放免费| 国产自国产自愉自愉免费24区 | 麻豆亚洲AV成人无码久久精品 | 一个人看的www免费高清| 亚洲AV无码专区在线观看成人 | 97在线观免费视频观看 | 亚洲高清中文字幕| 亚洲精品成人片在线播放 | 美女羞羞视频免费网站| 亚洲熟妇AV乱码在线观看| 亚洲成a人不卡在线观看| 久久久久亚洲av无码专区| 中文字幕亚洲电影| 免费一级毛片在线观看| 日本特黄特色aa大片免费| 成人毛片18女人毛片免费视频未| 亚洲三级在线免费观看| **aaaaa毛片免费同男同女| 日本免费人成视频在线观看| 国产免费久久精品99久久| 欧洲乱码伦视频免费国产| 大片免费观看92在线视频线视频| 色噜噜的亚洲男人的天堂| 国产亚洲午夜精品| 色九月亚洲综合网| 日日狠狠久久偷偷色综合免费| 国产精品亚洲一区二区在线观看| 亚洲妇女无套内射精| 国产精品亚洲精品日韩电影| 美女扒开屁股让男人桶爽免费| 黄床大片30分钟免费看| 五月天婷婷精品免费视频| 久久免费99精品国产自在现线 | 在线精品亚洲一区二区小说| 中文字幕一精品亚洲无线一区| 国产综合亚洲专区在线|