<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    產(chǎn)生唯一隨機(jī)碼的方法分析。

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

      現(xiàn)在的WEB中經(jīng)常會需要產(chǎn)生一些邀請碼、激活碼。需要是唯一并且隨機(jī)的。下面總結(jié)下一些常用的產(chǎn)生隨機(jī)碼的方法,并分享自己的1個方法:

     

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

         優(yōu)點(diǎn):沒發(fā)現(xiàn)有啥優(yōu)點(diǎn)。     

         缺點(diǎn):產(chǎn)生速度慢,還要查詢數(shù)據(jù)庫,當(dāng)數(shù)據(jù)量大的時候,可能重復(fù)的機(jī)率會比較高,要查詢多次數(shù)據(jù)庫.

     

    2. guid,該方法應(yīng)該是用的比較多的。     

      優(yōu)點(diǎn):使用簡單方便,不用自己編寫額外的代碼     

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

     

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

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

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

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

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

      優(yōu)點(diǎn):使用也比較簡單,不用查詢數(shù)據(jù)庫。最大的優(yōu)點(diǎn)是查詢的時候,可以根據(jù)邀請碼直接得到主鍵id,     

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

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

     

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

      1) 獲取id: 155    

      2) 轉(zhuǎn)換成8進(jìn)制:233    

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

      4)在后面隨機(jī)產(chǎn)生若干個隨機(jī)數(shù)字字符:2003967524987 

       轉(zhuǎn)為8進(jìn)制后就不會出現(xiàn)9這個字符,然后在后面加個'9',這樣就能確定唯一性。最后在后面產(chǎn)生一些隨機(jī)數(shù)字就可以。

          優(yōu)缺點(diǎn)同方法3

     

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


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



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

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

    評論

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。[未登錄]  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    轉(zhuǎn)8進(jìn)制后在后面加個"9"就能保證這段數(shù)字是唯一的。

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    一個比較好的隨機(jī)串產(chǎn)生方法是創(chuàng)建BigInteger,然后傳入SecureRandom產(chǎn)生隨機(jī)的大數(shù)字,再編碼成包含數(shù)字和字母的串,基本上沒有重復(fù)。

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

    我說方式的實(shí)現(xiàn)代碼:http://code.google.com/p/guzz/source/browse/trunk/core/org/guzz/id/RandomIdGenerator.java

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。[未登錄]  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。  回復(fù)  更多評論   

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

    # re: 產(chǎn)生唯一隨機(jī)碼的方法分析。[未登錄]  回復(fù)  更多評論   

    2014-09-15 08:48 by lei
    生成:
    1.獲取id(固定長度)
    2,根據(jù)id用保密的方法生成哈希(根據(jù)需要節(jié)選一定的長度)
    3,最后把 id+哈希 用不易混淆的字符編碼成序列號。
    檢驗:
    1,解碼
    2,用前面的id用同樣的方法生成哈希
    3,檢驗
    主站蜘蛛池模板: 午夜影院免费观看| 免费h成人黄漫画嘿咻破解版| 亚洲一区二区三区精品视频| 亚洲午夜无码AV毛片久久| 99视频免费在线观看| 亚洲午夜久久久精品电影院| 免费人成网站7777视频| 鲁丝片一区二区三区免费| 亚洲色图综合在线| 黄色成人免费网站| 麻豆69堂免费视频| 亚洲美女中文字幕| 亚洲Av无码乱码在线znlu| 四虎1515hh永久久免费| 人与动性xxxxx免费| 国产亚洲情侣一区二区无| 丰满少妇作爱视频免费观看| 亚洲美女精品视频| 久久久久亚洲AV无码专区网站 | 在线观看人成视频免费无遮挡| 亚洲人成777在线播放| 亚洲午夜久久久久久久久久| 久久久久久久久免费看无码| 91视频精品全国免费观看| 亚洲色成人WWW永久在线观看| 两个人看的www免费高清| 亚洲五月丁香综合视频| 亚洲AV永久无码精品成人 | 亚洲综合小说久久另类区| 亚洲A∨午夜成人片精品网站| eeuss免费天堂影院| 久久精品国产亚洲香蕉| 四虎精品亚洲一区二区三区| 成人免费午夜在线观看| 91香焦国产线观看看免费| 两个人的视频www免费| 无套内谢孕妇毛片免费看看| 色天使亚洲综合在线观看| 亚洲精品97久久中文字幕无码| 久久爰www免费人成| 精品国产成人亚洲午夜福利|