我需要一个随机数,我将在每个记录中存储在数据库中,并且(生成的随机数)也不应该在将来重复。那么Math.random()函数对此有用吗?
提前致谢
答案 0 :(得分:3)
Math.random()
不会为您提供一个唯一的号码,一般来说它甚至不会给您一个真正的随机数。
你可以尝试使用基于日期时间的随机算法,或者去一个随机数,然后检查它是否已经存在于你的数据库中,但这两种方法都不是100%保存。几乎只有一种方法可以确保您存储的数字是唯一的,这是在数据库级别上。
答案 1 :(得分:2)
您可以在此处查看GUID生成器,以获取数据库的唯一键。在那里你可以找到很多关于随机机制的好信息
答案 2 :(得分:2)
随机是随机的,统计上它将在未来的某个地方重复。您可以做的是将一些独特的东西与随机部分结合起来 - 例如使用 unix时间戳和随机数。
function getRand(){
return new Date().getTime().toString() + Math.floor(Math.random()*1000000);
}
答案 3 :(得分:1)
时间+增量+随机:
post-titie
答案 4 :(得分:0)
如果你看一下math.random的规格,你会看到它被定义为准随机数生成器,这意味着它不是真正随机的。此外,一个真正的随机数发生器肯定会在沿线BUT的某处重复一个结果,当发生这种情况时,重复之后的系列将不会像第一次出现该数字后的系列那样。
现在,您提到需要将其存储在数据库中。为什么不使用SEQUENCE(在Oracle中;其他DBMS有不同的机制)?这将保证任何使用过的号码永远不会被重复使用。此外,如果您不想在序列中使用数字,则可以使用此序列的值作为随机数(或散列)的种子。这将为您提供许多数字的唯一性。