当前位置: 首页 > 编程语言 > C#

如何生成“随机”但又“唯一”的数字?分享

时间:2023-04-10 12:54:18 C#

如何生成“随机”又“唯一”的数字?如何生成随机数。java等语言是如何生成随机数的,尤其是对于GUID是如何做到的。我发现像伪随机数生成器这样的算法使用初始值。但是我需要创建一个随机数程序,其中出现一次的数字永远不会重复,即使系统重新启动等也是如此。我认为我需要将值存储在任何地方以便检查重复数字,但是当列表超过限制时它太复杂了。第一:如果保证数字永远不会重复,那么它就不是很随机。第二:PRNG算法有很多。更新:第三:有一个用于UUID的IETFRFC(MS调用GUID),但如果您担心的话,您应该意识到(U|G)UID在密码学上是不安全的。更新2:如果您想在生产代码中实际使用类似的东西(不仅仅是为了您自己的灵感),请使用一个预先存在的库。如果您以前从未这样做过(或者即使您曾经这样做过),这种代码几乎肯定会有细微的错误。更新3:这是.NETGUID的文档有很多方法可以生成随机数。正如您所描述的,它通常是使用使用带有种子的伪数生成器的系统/库调用来完成的。但是,还有其他获取随机数的方法,这些方法涉及专门的硬件来获取真正的随机数。我知道一些使用这种硬件的扑克网站。阅读他们是如何做到的非常有趣。大多数随机数生成器都有一种“随机”重新初始化种子值的方法。(有时称为随机化)。如果那不可能,您也可以使用系统时钟来初始化种子。您可以使用此代码示例:http://xkcd.com/221/或者,您可以使用这本书:http://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477但说真的关键是,不要自己实现,使用现有的库。你不能是第一个这样做的人。具体关于Java:我知道您正在寻找一种使用C#生成随机数的方法。如果是,那么RNGCryptoServiceProvider就是您要找的。[编辑]如果使用RNGCryptoServiceProvider生成相当长的字节数,它可能是唯一的,但不能保证。从理论上讲,真正的随机数并不意味着是唯一的。你掷骰子两次,你可能会同时得到正面,但它们仍然是随机的。真正随机!我想应用唯一的检查,你只需要推出你自己的机制来保留以前生成的数字的历史记录。以上就是C#学习教程:如何生成“随机”又“唯一”的数字?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: