如何始終使用c#生成17個字符的唯一字母數字數據。如何生成獨特的字母數字?
回答
生成新的Guid,並通過模62分割17次。您獲得的每個數字都是上述char數組中的索引(「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890」)。 通過使用Guid,您可以保證您的價值與Guid一樣獨特。
如果您關心失去唯一位你可以用MD5哈希GUID是這樣的:
Guid guidValue = Guid.NewGuid();
MD5 md5 = MD5.Create();
Guid hashed = new Guid(md5.ComputeHash(guidValue.ToByteArray()));
UPDATE的GUID格式
根據這一文件(RFC 4122),並比較所產生的GUID C#,它們是隨機類型的。
這種類型的具有以下模式:xxxxxxxx-xxxx-4xxx-Vxxx-xxxxxxxxxxxx
,其中
x
是隨機數,並且V
與位佈局10yy,其中yy是兩個隨機比特的數目。
所以,這裏我們有128個隨機比特。因此,就唯一性而言,Guid只是一個大的隨機數,您可以自由使用任何其他隨機數生成算法,產生88位隨機數(例如RNGCryptoServiceProvider
)。
當然,用於生成Guids的方法可能會在未來版本的框架中發生變化,但目前Guid.NewGuid()看起來就像代碼中的廉價隨機數生成器。
+1,因爲GUID是唯一的,並且這些算法儘可能地保留了唯一性。 – 2011-04-06 13:12:18
@Cosmin:你不能保證在不知道GUID是如何生成的情況下,儘可能地保留GUID的唯一性。這種算法可能會失去所有保證唯一性的位(我並不是說它確實存在,但這是一種理論上的可能性)。 – LukeH 2011-04-06 13:18:26
@LukeH:注意到在帖子後面...我通過將GUID的剩餘部分除以大的108位素數來解決這個問題。或者通過做一些部分異或操作來確保我處理了12個字節,這些字節受初始16個字節中所有位的影響。當然,它不可能具有與最初的GUID相同的屬性,但它會非常好。 – 2011-04-06 13:50:20
您可以硬編碼字符集 -
char[] chars = new char[62];
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890".ToCharArray();
然後用62 0之間的隨機數,即可獲得隨機字符每次和追加到您的字符串。
但是,您不能保證在某個時間的車道上,您也不會收到重複的字母數字字符串。
作爲替代,如果可能的話,爲什麼不使用GUID?
如果一個GUID可以在其範圍內(128位)「保證」唯一性,那麼爲什麼17字符A-Za-z0-9字符串不能保證其自身範圍(大約100位)的唯一性?使用正確的算法,您可以在需要重複自己之前生成2 ** 100個獨特的字符串。 – LukeH 2011-04-06 13:07:17
17位字符串由您生成。如果你有一個算法來檢查唯一性,那麼它可以得到保證。否則沒有。 – 2011-04-06 13:28:02
你可以試試... http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx
的GetRandomFileName方法返回一個可以作爲任何一個文件夾名或文件名保密性強,隨機字符串。
或任何你想要的。
請注意,此方法有一定的侷限性:在每次調用時,您只能獲得11個小寫字母數字字符,因爲它爲您提供了8.3格式的文件/文件夾名稱(即「qwer176d.d9s」)。 – Artemix 2011-04-06 15:17:51
- 1. 生成獨特的隨機字母數字字符串
- 2. 在HTML/PHP生成獨特的5個字母數字的ID
- 3. 獨特的字母數字密鑰生成器
- 4. 生成的字母數字字符串
- 5. 如何生成20個字符的字母數字唯一ID
- 6. RandomStringGenerator生成字母數字字符串
- 7. 生成獨特的隨機字符串
- 8. Ruby/Rails獨特的名字生成器
- 9. 生成英文字母的字母
- 10. 如何基於名字和姓氏生成獨特的3或4個字母的字符串
- 11. 如何生成隨機字母數字字符串?
- 12. 如何生成一個字符串使用字母和數字?
- 13. 生成字母數字串順序
- 14. 自動生成字母數字ID
- 15. 生成字母數字員工ID
- 16. 如何從mysql中的AES_ENCRYPT()生成字母數字密碼?
- 17. MySQL:如何訂購生成的字母數字?
- 18. 如何在MySQL中生成唯一的字母數字內容?
- 19. 如何從Java生成獨特的4字符隨機密鑰
- 20. 如何使用LINQ生成字符串的非獨特聯合?
- 21. PHP和c#:如何爲Web內容生成字母數字ID?
- 22. 如何在SQL Server中生成字母數字標記?
- 23. 如何在PHP中生成字母數字遞增ID?
- 24. 如何在java中生成字母數字ID?
- 25. 如何在c中生成字母數字序列號
- 26. 如何從sql查詢生成字母數字值?
- 27. 獨特字數
- 28. SQL - 生成具有特定格式的字母數字字符串
- 29. 生成隨機字母的函數
- 30. 生成獨特的8字符Hex字符串
你永遠不能保證一個獨特的價值。在有限系統中沒有任何獨特之處。 – 2011-04-06 12:51:31
您是否考慮過使用Guid.NewGuid()。ToString(「N」)。子串(0,17),儘管如上所述,您需要決定它需要的「獨特」,哦,它只有字母A到F :-) – 2011-04-06 13:04:19
@ DanielA.White根據[This Document](http://www.ietf.org/rfc/rfc4122.txt)的第3頁,GUID類可以生成一個唯一值。 – Amir 2013-05-02 18:47:44