匹配一个经典的ASP随机数与一个c#随机数
本文关键字:随机数 一个 经典 ASP | 更新日期: 2023-09-27 18:01:33
这个问题有点奇怪。我有一个网站,其中有一些页面在经典的ASP,和其他在ASP.net。
我有一个脚本,缓存他们的重力图像。它托管在一个无cookie的域中,位于以下位置之一:
http://static1.scirra.net
http://static2.scirra.net
http://static3.scirra.net
http://static4.scirra.net
当一个页面请求我的ASP.net站点上的gravatar时,它将通过这个函数,该函数将其随机分配给静态服务器:
/// <summary>
/// Returns the static url for gravatar
/// </summary>
public static string GetGravatarURL(string Hash, int Size, int AuthorID)
{
Random rndNum = new Random(AuthorID);
int ServerID = rndNum.Next(0, 4)+1;
string R = "//static" + ServerID.ToString() + ".scirra.net/avatars/" + Size + "/" + Hash + ".png";
return R;
}
我的经典ASP部分的功能是:
function ShowGravatar(Hash, AuthorID)
Dim ServerID
Randomize(AuthorID)
ServerID = Int((Rnd * 4) + 1)
ShowGravatar = "//static" & ServerID & ".scirra.net/avatars/" & intGravatarSize & "/" & Hash & ".png"
end function
它工作得很好,它在用户ID上播种,然后分配给他们一个静态服务器来服务器他们的头像。唯一的问题是,c#和经典ASP RNG的输出结果不同!这对于缓存来说不是最优的,因为相同的图像最多可以在2个不同的域中提供。
有什么简单的方法吗?
返回可预测值的随机数生成器称为哈希-可预测的随机性在随机数生成器中一点也不酷:-)
那么,用一些散列函数替换对rand的调用,就可以了。发挥你的想象力:哈希函数可以像authorid的crc的模4一样简单。
为什么不直接使用gravatar哈希来确定服务器呢?例如,您可以将引力哈希的第一个字符取4的模