我们正在尝试创建一个随机数生成器来为虚拟装配线上的产品创建序列号。 我们得到了要生成的随机数,但是由于它们是序列号,我们不希望它们产生重复数据。 有没有办法可以返回并检查生成的数字是否已经生成,然后告诉它如果它是重复的以生成新的数字,并且重复此过程直到它具有“独特“号码。在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. 试图在C#中创建一个随机数生成器4.69
- 10. 随机数发生器没有重复
- 11. 随机数发生器不重复
- 12. 非重复随机数发生器?
- 13. JavaScript中的非重复伪随机数生成器
- 14. 在Java中生成数百万个非重复的随机数
- 15. 如何在Swift中生成没有重复的随机数字?
- 16. 在Python中 - 如何生成不重复的随机数字
- 17. 在java中生成一个随机点数组没有重复
- 18. 在SWIFT中生成随机不可重复数组
- 19. 在iPhone中生成没有重复的随机数字?
- 20. 如何在Haskell中创建一个随机布尔生成器?
- 21. VB.net随机数生成器重复相同的值
- 22. 使随机骰子数组返回唯一attributres /防止重复
- 23. 的LINQ to SQL:防止重复创建
- 24. 生成,评估,然后在Ruby中重新生成随机数
- 25. 创建函数在平行四边形中生成随机点
- 26. 如何使用Reactor创建随机数生成器?
- 27. 在for循环中创建相同数字的随机数生成器Python
- 28. java随机发生器不重复
- 29. 如何在不重复Swift的情况下生成随机数
- 30. 如何避免随机生成WP7中的重复数字?
散列每个产品的名称/ ID /某些特性是不是更容易? – JCOC611 2011-04-05 17:59:24
@ JCOC611 - 散列会相互碰撞,所以它们不是你想要在这里使用的。确保唯一性的确定性算法就是你想要的。 – tvanfosson 2011-04-05 18:07:15