2013-04-09 307 views
0

我得到了一個生成隨機數的代碼。根據用戶ID生成唯一的隨機數

public string Get8Digits() 
{ 
    var bytes = new byte[4]; 
    var rng = RandomNumberGenerator.Create(); 
    rng.GetBytes(bytes); 
    uint random = BitConverter.ToUInt32(bytes, 0) % 100000000; 
    return String.Format("{0:D8}", random); 
} 

但我正在尋找一個例程,我將通過用戶ID和例程將生成基於用戶ID的唯一隨機數。在我的情況下,用戶ID可以像

a) 1,2,3,100,5000 
b) C0001,C0002,C0003,C0010 
d) AL62YU,B1N36W,ZU21PQ etc 
+4

如果你正在重複生成一個基於'userId'的數字,這個數字根據定義*不是隨機*。也許你應該解釋你使用的是什麼? – 2013-04-09 14:12:25

+2

好的,所以在最壞的情況下,假設在現有ID中有6個字符的基本方案,我們正在查看0-2176782335的數字空間。這似乎大於您的第一個代碼片段中隱含的0-100000000的ID空間。因此,你所要求的顯然是不可能的。 – spender 2013-04-09 14:12:42

回答

1

可能不是你要找的答案,但在你的前提這裏有缺陷,

假設你想與8位的數字,你將有10^8 = 100'000'000 possible random numbers。如果您的用戶名只有6個字符,但包含數字和數字,則至少有36^6 = 2'176'782'336 possible combinations

因此,您顯然不能爲每個用戶標識生成唯一的隨機數字 - 至少在不擴展或更改標識符格式的情況下至少不會。這對你來說是一個可行的選擇嗎?這個ID號碼是否有其他限制?

+0

所以請告訴我,我需要從我的結局改變。我想生成一個隨機數字,這個數字在5秒內有效。請討論所需的更改。 – Thomas 2013-04-10 06:48:51

+0

很明顯,你需要一個可以包含'2'176'782'336'不同值的數字。或者,你也可以在這裏使用字母和數字,並使用字符串而不是數字?然後,您可以使用與原始問題中第三種類型的用戶ID相同的格式。您可以/想要使用哪種格式取決於您。你有什麼限制,如果有的話? (即它是否是一個數字,它有多大) – Kjartan 2013-04-10 10:42:08

+0

它可以是字符串。所以你只是指導我如何實現我想要的...請帶示例代碼。謝謝 – Thomas 2013-04-11 07:17:16