匹配一个经典的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个不同的域中提供。

有什么简单的方法吗?

匹配一个经典的ASP随机数与一个c#随机数

返回可预测值的随机数生成器称为哈希-可预测的随机性在随机数生成器中一点也不酷:-)

那么,用一些散列函数替换对rand的调用,就可以了。发挥你的想象力:哈希函数可以像authorid的crc的模4一样简单。

为什么不直接使用gravatar哈希来确定服务器呢?例如,您可以将引力哈希的第一个字符取4的模