我們正在嘗試創建一個隨機數生成器來爲虛擬裝配線上的產品創建序列號。 我們得到了要生成的隨機數,但是由於它們是序列號,我們不希望它們產生重複數據。 有沒有辦法可以返回並檢查生成的數字是否已經生成,然後告訴它如果它是重複的以生成新的數字,並且重複此過程直到它具有「獨特「號碼。在jscript中創建隨機數生成器並防止重複
回答
解決此問題的最簡單方法是避免它。使用單調遞增的東西(如時間)來形成序列號的一部分。爲此,您可以添加一些固定值來標識該行或某物。
所以您的序列號格式可以NNNNYYYYMMDDHHMMSS,其中NNNN是一個4位數的行號和YYYY是4位數的年份,MM是兩位數月份,...
如果可以生成多種東西每行每秒,然後添加日期組件,直到您達到每單位時間只有一個可能的時間 - 或者將當天生成的項目計數添加到YYYYMMDD組件(例如,NNNNYYYYMMDDCCCCCC)。
您可以通過使用更高的基數來使其縮短一些數字,例如使用數字0-9A-Z(減ILOQ)的base-32。這將讓你用3個「數字」來編碼年份,每個月份和每天的數字都是1「數字」。 – tvanfosson 2011-04-05 18:13:26
隨着一個真正的隨機數,你將不得不存儲整個集合,並檢查每個數字。很顯然,這意味着你生成的密鑰越慢,越慢(因爲它必須越來越頻繁地重試,並與較大的數據集進行比較)。
這完全是爲什麼真正的隨機數從來沒有用於此目的。對於序列號,標準始終只是做一個連續的數字 - 他們是否有任何真實的隨機數?
唯一ID從不隨機 - GUID等基於系統時間和(最經常)MAC地址。由於使用的算法和機器細節,它們是全球唯一的 - 不是因爲數值的大小或任何隨機性水平。
就我個人而言,我會盡我所能去使用順序值(如果您有多個通道,也許使用唯一的前綴),或者更好地使用真正的GUID來達到您的目的。
這是你在找什麼?
var rArray;
function fillArray (range)
{
rArray = new Array();
for(var x = 0; x < range; x++)
rArray [x] = x;
}
function randomND (range)
{
if (rArray == null || rArray.length < 1)
fillArray (range);
var pos = Math.floor(Math.random()*rArray.length);
var ran = rArray [pos];
for(var x = pos; x < rArray.length; x++)
rArray [x] = rArray [x+1];
var tempArray = new Array (rArray.length-1)
for(var x = 0; x < tempArray.length; x++)
tempArray [x] = rArray [x];
rArray = tempArray;
return ran;
}
這對已經接受的答案有什麼改進? – 2012-10-27 20:44:17
- 1. 生成隨機元素位置,並防止在JavaScript中重疊
- 2. 如何防止重複隨機生成的數字
- 3. 如何防止隨機數字發生器重複數字?
- 4. 防止隨機數多生成一次
- 5. 防止重複的隨機代碼生成?
- 6. 低效代碼:防止產生重複的隨機數
- 7. 隨機數發生器產生重複
- 8. 隨機選擇防止一些重複
- 9. 隨機數生成器在simulink中是重複的
- 10. 在批量隨機數生成器中重複應答
- 11. Android - 生成非重複的隨機數
- 12. 生成隨機數對,沒有重複
- 13. 隨機數生成沒有重複
- 14. 生成隨機數字而不重複
- 15. 生成非重複的隨機數
- 16. 避免生成重複的隨機數
- 17. 生成沒有重複的隨機數
- 18. Java生成非重複的隨機數
- 19. 如何阻止我的隨機圖像生成器重複?
- 20. 我的隨機數生成器正在打印重複數
- 21. 試圖在C#中創建一個隨機數生成器4.69
- 22. 如何創建生成隨機數
- 23. JavaScript中的非重複僞隨機數生成器
- 24. 隨機數發生器沒有重複
- 25. 隨機數發生器不重複
- 26. 非重複隨機數發生器?
- 27. Vb.net隨機數字生成器重複相同的數字
- 28. 隨機數生成器幫助不生成隨機數 - C
- 29. 隨機數據生成器
- 30. Python隨機數生成器
散列每個產品的名稱/ ID /某些特性是不是更容易? – JCOC611 2011-04-05 17:59:24
@ JCOC611 - 散列會相互碰撞,所以它們不是你想要在這裏使用的。確保唯一性的確定性算法就是你想要的。 – tvanfosson 2011-04-05 18:07:15