我的一個客戶想要爲他的項目使用一個唯一的代碼(長篇故事..),他問我一個解決方案。代碼將包含4個部分,其中第一個是發送物品的郵政編碼,第二個是供應商註冊號碼,第三個號碼是發送物品的年份,最後一部分是三個除法字母數字獨特的字符。非重複性隨機字母數字代碼
正如你所看到的,前三部分是靜態字段,對於同一個發件人在同一年內永遠不會改變。所以我們可以說最後一部分是那年的標識符部分。這部分是3分的alpahnumeric,意思是從000開始到ZZZ結束。
問題是,我的客戶,由於一些合理的原因,希望這部分不是順序的。例如,這不是他想要的東西:
06450-05-2012-000
06450-05-2012-001
06450-05-2012-002
.. 。
06450-05-2012-ZZY
06450-05-2012-ZZZ
最後一部分應該產生隨機似:
06450-05-2012-A17
06450-05-2012-0BF
06450-05-2012-002
...
06450-05-2012 -T7W
06450-05-2012-22C
但它也應該是不重複的。所以一旦產生了一個可能的id,就應該從選擇池中丟棄這個可能性。
我正在尋找一種有效的方法來做到這一點。
- 如果我只記錄選定的可能性並檢查一個新創建的對他們的可能性,總會有最壞的情況發生,特別是在接近尾聲的情況下。
- 如果我一次創建所有可能性並將它們記錄在表或文件中,則每次創建項目可能需要一段時間,因爲它會查找未選擇的記錄。順便說一句,26個字母+10個數字意味着46.656個可能的組合,並且有可能會添加第4個divison,這意味着1.679.616個可能的組合。
有沒有更有效的方法可以建議?我將使用C#編碼和MS SQL數據庫..
它必須是真正的隨機或只是不增量? – empi
這聽起來像一個家庭作業..你是什麼意思,由於合理的原因..?聽起來像請求/任務在本質上是不合理的.. – MethodMan
你的意思是說隨機而不是重複的部分只是最後一個3個字符? – Alaa