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

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

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

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    產生唯一隨機碼的方法分析。

    Posted on 2010-10-19 11:24 BearRui(AK-47) 閱讀(10484) 評論(22)  編輯  收藏 所屬分類: Java

      現在的WEB中經常會需要產生一些邀請碼、激活碼。需要是唯一并且隨機的。下面總結下一些常用的產生隨機碼的方法,并分享自己的1個方法:

     

    1. 自己寫代碼產生隨機的數字和字母組合,每產生1個去數據庫查詢該隨機碼是否已存在,如果已存在,則重新產生,直到不重復為止。

         優點:沒發現有啥優點。     

         缺點:產生速度慢,還要查詢數據庫,當數據量大的時候,可能重復的機率會比較高,要查詢多次數據庫.

     

    2. guid,該方法應該是用的比較多的。     

      優點:使用簡單方便,不用自己編寫額外的代碼     

      缺點:占用數據庫空間相對較大,特別是根據guid查詢速度比較慢(畢竟是字符串)。

     

    3. 主鍵+隨機碼的方式,我們產生的隨機碼保存到數據庫肯定會有個主鍵,用該主鍵+隨機字符來組合。產生步驟:     

      1) 先從id生成器中獲取id,比如是155.     

      2)填充成固定位數(比如8位)的字符串(不夠位數的左邊填0,超過位數直接使用該數字),得到:00000155     

      3)在每個數字后面隨機插入1個字母或其它非數字符號,得到:0A0F0R0Y0H1K5L5M

       這樣就可以得到1個隨機的唯一的邀請碼了。    

      優點:使用也比較簡單,不用查詢數據庫。最大的優點是查詢的時候,可以根據邀請碼直接得到主鍵id,     

         然后根據id去數據庫查詢(速度很快),再比較查詢出來的邀請碼和用戶提交的邀請碼是否一致。    

      缺點:需要使用id產生器,如果主鍵是數據庫自增長的就不太好用(需要先插入數據庫獲取id,再更新邀請碼)。

     

    4. 有時候產品經理說,我要求邀請碼都是數字的。why?no why? 我喜歡。*(&^(^%&^$&^$ 把方法3變通下就可以實現唯一的純數字隨機碼了。    

      1) 獲取id: 155    

      2) 轉換成8進制:233    

      3) 轉為字符串,并在后面加'9'字符:2339    

      4)在后面隨機產生若干個隨機數字字符:2003967524987 

       轉為8進制后就不會出現9這個字符,然后在后面加個'9',這樣就能確定唯一性。最后在后面產生一些隨機數字就可以。

          優缺點同方法3

     

    目前方法3,4方法在我們產品中都使用了,感覺還可以。 


    PS:以上是個人淺見,有更好方法的同學請分享下。^_^ 



    [作者]:BearRui(AK-47)
    [博客]: http://www.tkk7.com/bearrui/
    [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: 產生唯一隨機碼的方法分析。[未登錄]  回復  更多評論   

    2010-10-19 13:51 by GreatGhoul
    最后一個原理是什么?

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-19 13:53 by BearRui(AK-47)
    @GreatGhoul
    最后1個原理也是使用唯一的KEY+隨機數字。

    轉8進制后在后面加個"9"就能保證這段數字是唯一的。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-19 18:22 by huliqing
    文章很精彩,推薦一下!
    納悶:(
    剛才看了您文章下的幾個按鈕,看著不錯,點了幾下,沒有想到變成回復刷屏了。抱歉哦!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-19 18:47 by @joe
    第四種思想不錯。
    建議根據使用頻率先在數據庫批量生成一定數量的自增數,供使用,而不是每次都插入新的數。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-19 18:48 by BearRui(AK-47)
    @@joe
    預先插入數據的方法也非常不錯,謝謝分享。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-19 18:49 by BearRui(AK-47)
    @huliqing
    呵呵,沒關系,^_^

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-20 07:58 by 深藍色心情
    1和2的方式好像是不行的,經過我測試,無論uuid還是guid,同一臺機器,產生的隨機碼都是和時間相關的。如果短時間產生的串,只有后幾位不一樣,其他都一樣,所以還是比較容易碰出來的。

    一個比較好的隨機串產生方法是創建BigInteger,然后傳入SecureRandom產生隨機的大數字,再編碼成包含數字和字母的串,基本上沒有重復。

    guzz提供了random主鍵生成器,如果您用guzz做持久層,只需要指定id的generator="random"就自動獲取了產生隨機主鍵的支持。通過length參數選擇隨機主鍵的長度。

    我說方式的實現代碼:http://code.google.com/p/guzz/source/browse/trunk/core/org/guzz/id/RandomIdGenerator.java

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-20 08:56 by BearRui(AK-47)
    @深藍色心情
    你的方法也不錯,不過你這方法只是理論上的不重復吧。

    你用這個做主鍵insert前不判斷該key是否已經存在嗎?還是在insert出錯后再重新生成?

    # re: 產生唯一隨機碼的方法分析。[未登錄]  回復  更多評論   

    2010-10-20 09:39 by Carl
    不錯!我的數據庫主鍵ID就是采用的4方法。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-20 14:10 by @joe
    你那幾個按鈕貌似用來給自己增加點擊率的吧,夠狠啊 兄弟!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-20 14:19 by BearRui(AK-47)
    @@joe
    哈哈,本來只是想讓懶人做個簡單快捷的評價,但很多人不知道就狂點了。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-20 17:11 by 深藍色心情
    @BearRui(AK-47)

    很難出現重復,如果你用64位長度的key,出現重復的幾率為36的64次方,幾乎可以忽略。不需要提前驗證key是否存在。

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:47 by 李小武
    看不懂哦,~_~

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:47 by 李小武
    文章很精彩,推薦一下!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:47 by 李小武
    好文章,頂一下!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:47 by 李小武
    文章很精彩,推薦一下!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:53 by 李小武
    好文章,頂一下!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:53 by 李小武
    文章很精彩,推薦一下!

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2010-10-22 23:54 by 李小武
    不錯啊,一會實踐一下

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2012-07-29 17:28 by justintung
    "自己寫代碼產生隨機的數字和字母組合…… 優點:沒發現有啥優點。缺點:產生速度慢,還要查詢數據庫,當數據量大的時候,可能重復的機率會比較高,要查詢多次數據庫." 為什么要查數據庫?后面3種方法是機器的自主意識產生的,不用代碼實現?

    # re: 產生唯一隨機碼的方法分析。  回復  更多評論   

    2014-04-17 16:08 by chieveit
    剛好遇上這個問題,很有幫助,謝謝!

    # re: 產生唯一隨機碼的方法分析。[未登錄]  回復  更多評論   

    2014-09-15 08:48 by lei
    生成:
    1.獲取id(固定長度)
    2,根據id用保密的方法生成哈希(根據需要節選一定的長度)
    3,最后把 id+哈希 用不易混淆的字符編碼成序列號。
    檢驗:
    1,解碼
    2,用前面的id用同樣的方法生成哈希
    3,檢驗
    主站蜘蛛池模板: 久久精品无码专区免费| 黄页网站在线免费观看| 亚洲视频在线免费观看| 日韩亚洲一区二区三区| 免费无码A片一区二三区| 亚洲成av人片天堂网| 免费看男人j放进女人j免费看| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲an日韩专区在线| 久久午夜夜伦鲁鲁片免费无码影视 | 精品多毛少妇人妻AV免费久久| 亚洲一本大道无码av天堂| 久久www免费人成看国产片| 亚洲熟妇无码八AV在线播放| 成全高清在线观看免费| 久久精品国产亚洲av麻豆色欲 | 国产人在线成免费视频| 亚洲综合成人婷婷五月网址| 四虎影永久在线高清免费| yellow免费网站| 中文字幕亚洲精品资源网| 四虎永久在线精品免费网址| 美女被免费视频网站a| 久久久久久久尹人综合网亚洲| a拍拍男女免费看全片| 亚洲国产成人精品无码区花野真一| 好吊妞视频免费视频| 一级片在线免费看| 亚洲激情中文字幕| 日韩a级毛片免费视频| 好男人资源在线WWW免费| 亚洲国产精品久久久久秋霞影院| 性感美女视频在线观看免费精品| 一区二区视频在线免费观看| 亚洲av永久无码精品古装片| 久久久久久国产精品免费免费| 久草免费福利在线| 久久久久精品国产亚洲AV无码| 无码欧精品亚洲日韩一区夜夜嗨 | 7723日本高清完整版免费| 国产亚洲高清在线精品不卡|