我正在为我的博客制作一个匿名评论系统。我需要用户从我制作的数组中随机选择一个用户名,它有 600 个用户名。我不能只是让它随机,因为那样人们就不会知道它是否是同一个人发布回复,所以我给每个帖子一个随机生成的 1-9999 之间的密钥,使用密钥和我想要的用户 ID进行某种计算,以便该数字在该特定帖子中保持一致。结果必须在 1-600 之间。
就像是:
user_id x foo(1-9999) = bar(1-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 和 post 键上使用 md5。它为您提供了一致的 32 字节散列。它实际上是一个十六进制字符串,因此您实际上可以通过将十六进制转换为整数来轻松地将其转换为数字。
编辑:根据您的反馈。您可以将生成的 int 取模并取模 600。