基于两个变量在特定范围内生成int

时间:2012-04-24 00:51:49

标签: php math

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

类似的东西:

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

感谢。

3 个答案:

答案 0 :(得分:1)

您可能正在寻找的是hash function。引用维基百科:

  

哈希函数是将可变长度的大数据集(称为密钥)映射到固定长度的较小数据集的任何算法或子例程。

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

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];
}

答案 1 :(得分:0)

那么,你真正想要的是每张海报的唯一标识符吗?

为什么不使用http://php.net/ip2long modded 600?

当然,你也必须用它进行一些碰撞检测。

答案 2 :(得分:0)

您可以尝试在连接的id和post键上使用md5。它为您提供了一致的32字节哈希值。它实际上是一个十六进制字符串,因此您可以通过执行十六进制到int转换来轻松地将它贪图一个数字。

编辑:根据您的反馈。你可以使用生成的int并将其调制为600。