我试图将网址映射到范围[0,50]中用于移植的数字,这应该在范围内均匀分布,以便不会对端口进行锤击。
下面是我的代码,但我可以弄清楚为什么模数对我不起作用。
$fetch_url = "http://74.125.224.72/profile/user";
$hash = sha1($fetch_url);
$hasher = substr($hash,1,50);
$port_index = hexdec($hasher)%50;
$port = 8700 + $port_index;
似乎一切都符合返回0的$ port_index。请记住,“user”是每次都不同的实际用户名。
最终目标如下:
http://74.125.224.72/profile/j - port = 8701
http://74.125.224.72/profile/m - port = 8702
http://74.125.224.72/profile/p - port = 8703
每次用户登录并点击他们的个人资料时都应如此。
有什么想法吗?
由于 -J
答案 0 :(得分:1)
我认为问题是sha1哈希的十六进制转换是如此巨大,以至于PHP有点停止将其作为数字处理。你应该修剪哈希和hexdec的最后几个字符。看起来你可能一直在试用你的substr,但sha1是40个字符,你做了50个子字符。 50那是一个错误吗?
因此,hexdec会返回类似'5.4627305075531E + 46'的内容,这些内容无法正常运行。尝试:
$fetch_url = "http://74.125.224.72/profile/user";
$hash = sha1($fetch_url);
$hasher = substr($hash,-5); // get last 5
$port_index = hexdec($hasher)%50;
$port = 8700 + $port_index;