1. 程式人生 > >如何生成包含大寫字母、小寫字母和數字的隨機密碼

如何生成包含大寫字母、小寫字母和數字的隨機密碼

思路:

1、使用Random類生成對應型別的ASC碼,然後使用對應型別接收

2、為了避免Random的隨機造成死迴圈或者拿不到值,使用多執行緒進行處理,並且不使用迴圈和遞迴

3、分別生成對應的型別各一種(假設為A,b,1),然後根據密碼長度隨機生成n-3個字元。

4、串成單向迴圈連結串列,隨機給定一個間隔值,使用數猴王的方法進行解鏈,解鏈完成後則密碼生成成功。

具體思路:假設密碼長度為n

1、生成一個StringBuffer物件sb。

2、使用變數s1,s2,s3分別儲存一個隨機的大寫字母,小寫字母,數字

3、使用s4儲存長度為n-3的隨機字串

4、開啟執行緒1,執行緒2,執行緒3,每個執行緒生成對應型別的字元或數字,對sb進行同步append操作

5、將s1/s2/s3/s4串成單向迴圈連結串列

6、隨機給定間隔數開始取值,將該節點解鏈,使用StringBuilder進行append,直到連結串列為空

7、輸出隨機密碼:StringBuilder.toString();

PS:

這種方法相比較使用Random隨機生成30--7A的ASC碼方法,解決了Random一直取不到相應型別的最壞情況下的死迴圈問題,並且綜合使用執行緒非同步執行和同步修改的特性解決了隨機性的問題;但是缺點也很明顯:那就是,開銷過大