我只是想知道通常的方法是生成一個任意長度的隨機大小寫字母的唯一字符串?生成隨機上/下字母的唯一5字符序列?
我的直接想法是使用我使用的編程框架提供的guid生成器,然後將一個衆所周知的散列算法應用於guid。
如果是這樣的話,我需要研究哪些類型的散列函數?
感謝
我只是想知道通常的方法是生成一個任意長度的隨機大小寫字母的唯一字符串?生成隨機上/下字母的唯一5字符序列?
我的直接想法是使用我使用的編程框架提供的guid生成器,然後將一個衆所周知的散列算法應用於guid。
如果是這樣的話,我需要研究哪些類型的散列函數?
感謝
創建一個GUID是不是得到一個隨機數的好方法,如在GUID並不是所有的數據是隨機的。請使用Random
類。例如:然而
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int len = 5;
Random rnd = new Random();
StringBuilder b = new StringBuilder(len);
for (int i = 0; i < len; i++) {
b.Append(chars[rnd.Next(chars.Length)]);
}
string result = b.ToString();
注意,這並不保證代碼是獨特。爲了實現這一點,你必須保存所有以前的代碼,並檢查那些用於任何新代碼的代碼。儘管GUID被認爲足夠不足,但從GUID生成的短散列沒有該屬性。
'random!= unique'!即使是guid在技術上也不是獨一無二的。只有非常非常不可能的是,同一個將會被生產兩次。這只是由於guid基本上是非常大的數字(比5個字符多得多*),並且創建它們的算法具有非常好的分佈。如果你確實需要保證唯一性,那麼你需要「記住」你生成的所有東西,如果你得到了已經生成的東西,就要再次生成。 – Corak
或者更好的是,對於相對較小的範圍:生成*所有*可能性,然後隨機選擇一個並將其從下一次的可能性列表中刪除。 – Corak