2012-01-02 55 views
-5

根據當前日期和時間,我可以使用什麼邏輯來生成6位數隨機數。假設我想生成一個6位數的隨機數,這個數是有效的,最長可達5秒。 5秒後,如果有人將該隨機數輸入到系統中,則系統會說它已過期。有一件事我需要提到,不會有數據庫交互。我不想生成隨機數並將其存儲在數據庫表中。 5秒的有效性邏輯將被嵌入到生成的隨機數中,因此我可以稍後驗證它是否在5秒之前生成。如何根據當前日期和時間生成6位隨機數

我問另一個論壇這個問題,他們給我的代碼來生成6位隨機數字基於當前日期和時間像

var random = new Random(System.DateTime.Now.Millisecond); 
int randomNumber = random.Next(1, 500000); 

是它好嗎?因爲我不是高級開發人員。如果我可以使用上述邏輯生成6位數的隨機數,那麼以後如何以編程方式確定數字是在5秒之前生成的。基本上我需要兩個例程,根據當前日期&生成6位數的隨機數,另一個例程將檢查生成的數字是否在5秒之前生成。

請指導我的概念和代碼。謝謝

+0

嗯。你最好的選擇可能是用秒除以當前時間,除以5,並使用像md5sum這樣的散列算法,然後以md5sum爲模500000. – Dan 2012-01-02 06:27:41

+0

爲什麼這不是一個真正的問題? – 2012-01-02 06:31:01

+0

您試圖解決的實際問題是什麼?這聽起來像是一個即將到來的令牌,在這種情況下,加密當前時間是一個更好的解決方案。但是,沒有告訴我們你想做什麼,沒有人能回答「是不是?」。 – kdgregory 2012-01-02 15:27:53

回答

1

您不能反轉隨機數生成過程以確定該數字生成,特別是如果您播種Random毫秒。

獲得一個6位數的隨機數:

int randomNumber = random.Next(0, 1000000); 
+0

我的投票去找你 – 2012-01-02 06:32:50

+0

好吧,如果我的目標不可能隨機班,然後告訴我我需要使用什麼。我需要根據日期和時間生成6位數字,我可以稍後確定數字的生成時間。如果你有任何想法,請與我分享。謝謝 – 2012-01-02 07:09:35

+0

使用[時間戳](http://stackoverflow.com/questions/892074/function-that-c​​reates-a-timestamp-in-c-sharp)。 – 2012-01-02 07:34:17

1

如果它是這五秒鐘內保持相同的過程,你可以只存儲一個哈希表裏面的關鍵,並對其進行驗證檢查,這是在散列表裏面。還要在散列表中保存密鑰的創建時間,並定期清理該散列表(刪除過時的密鑰和相關數據)。

當然,您需要生成密鑰「隨機」或「加密」

+0

。我需要根據日期和時間生成6位數字,我可以稍後確定數字的生成時間。如果你有任何想法,請與我分享。謝謝 – 2012-01-02 07:09:57

+0

我不明白你的意見。只需保持現有密鑰與其數據之間的關聯(創建時間)即可。根據需要生成密鑰。 – 2012-01-02 07:10:59

+0

也許你的問題被嚴重問到。也許你不需要一個* random *鍵,而是一個隱藏一些信息(日期和時間)的鍵。使用任何(簡單)加密技術。不要使用任何隨機性,你需要一個可重現和確定性的行爲。 – 2012-01-02 07:21:36

相關問題