Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于两个变量在一定范围内生成整数_Php_Math - Fatal编程技术网

Php 基于两个变量在一定范围内生成整数

Php 基于两个变量在一定范围内生成整数,php,math,Php,Math,我正在为我的博客制作一个匿名评论系统。我需要用户从我制作的数组中随机选择一个用户名,它有600个用户名。我不能把它变成随机的,因为那样人们就不知道是不是同一个人发布了回复,所以我给了每个帖子一个1-9999之间的随机生成的密钥,使用密钥和用户ID,我想做一些计算,这样在特定的帖子中数字会保持一致。结果必须在1-600范围内 比如: user_id x foo(1-9999) = bar(1-600) 谢谢。那么,你真正想要的是每张海报都有一个唯一的标识符 为什么不使用modded 600 当然

我正在为我的博客制作一个匿名评论系统。我需要用户从我制作的数组中随机选择一个用户名,它有600个用户名。我不能把它变成随机的,因为那样人们就不知道是不是同一个人发布了回复,所以我给了每个帖子一个1-9999之间的随机生成的密钥,使用密钥和用户ID,我想做一些计算,这样在特定的帖子中数字会保持一致。结果必须在1-600范围内

比如:

user_id x foo(1-9999) = bar(1-600)

谢谢。

那么,你真正想要的是每张海报都有一个唯一的标识符

为什么不使用modded 600


当然,您还必须使用它进行一些冲突检测。

您可以尝试在相关id和post键上使用md5。它提供了一个一致的32字节散列。它实际上是一个十六进制字符串,所以通过十六进制到整数的转换,你可以很容易地把它转换成一个数字


编辑:根据您的反馈。您可以将生成的int和modulas取600。

您可能要查找的是一个。引用维基百科:

散列函数是将可变长度的大型数据集(称为键)映射到固定长度的较小数据集的任何算法或子例程

因此,您可以使用一个标准哈希函数,再加上模块运算,将该哈希函数的输出进一步映射到您的用户名范围,如下所示:

function anonymise($username, $post_key) {
    $hash = hash("adler32", "$username/$post_key");
    $hash_decimal = base_convert($hash, 16, 10);
    $anonymised_id = $hash_decimal % 600;

    return $usernames[$anonymised_id];
}

这将是一个随机整数,我需要一个基于ID和随机生成的postkey的常量。虽然如果我希望它们始终是常量,这将非常好,但我需要它们根据postkey进行更改。因此,将postkey连接到用户名(编辑以反映)会很酷,但我需要的结果总是在1-600之间。只是mod 600。唯一的问题是,桶大小如此之小,获得复制的机会就更高。我已经更新了我的答案。