php - 生成随机数的算法

标签 php mysql algorithm random pseudocode

我希望生成一个随机数并将其发送到数据库中特定 user_id 的表中。问题是,同一个号码不能使用两次。有上百万种方法可以做到这一点,但我希望非常热衷于算法的人有一种聪明的方法来以优雅的解决方案解决问题,因为满足以下条件:

1) 对数据库的查询量最少。 2) 对内存中的数据结构进行最少的爬行。

基本上这个想法是做以下事情

1) 创建一个从0到9999999的随机数
2)查询数据库,看号码是否存在
或者
2) 查询数据库中的所有号码
3) 查看返回的结果是否匹配来自数据库的任何内容
4)如果匹配,重复步骤1,如果不匹配,问题解决。

谢谢。

最佳答案

不,您的算法不可扩展。我之前所做的是连续发布数字(每次 +1),然后通过异或运算将它们传递给混杂位,从而给我一个看似随机的数字。当然它们并不是真正随机的,但在用户眼中它们看起来是随机的。


[编辑]附加信息

这个算法的逻辑是这样的,你使用一个已知的序列来 生成唯一的数字,然后你确定地操纵它们, 所以他们看起来不再是连续的了。一般的解决方案是使用 某种形式的加密,在我的例子中是一个 XOR 触发器,因为 它尽可能快,并且它满足了数字的保证 永远不会碰撞。

然而,如果你想要更喜欢,你可以使用其他形式的加密 随机查找数字,速度过快(比如你不需要生成很多 id)。现在选择加密算法的重点 是“数字永远不会碰撞的保证”。以及一种证明加密算法是否可以实现的方法 此保证是检查原始数字和结果是否 加密具有相同的位数,并且算法是 可逆(双射)。

[感谢 Adam LissCesarB 对解决方案的扩展]

关于php - 生成随机数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319524/

相关文章:

python - 在 django ORM 中获取注释内的列表

php - 在同一个 PHP 文件上使用两个具有不同排序规则的不同数据库

java - 解释将 N X N 矩阵旋转 90 度的算法

algorithm - 编码并生成 N 以下的唯一数字的固定序列

php - fatal error : Call to a member function fetch_assoc() on a non-object on insertion

javascript - 使用 html 和 php 生成密码

javascript - 根据所选选项显示文本

php - 引导表在大量记录上加载时间较长

php - 如何抓取网站上的动态内容并保存?

c++ - 使用 std::map 从数组中删除重复项