如何将IP地址转换为1到3之间的整数?

时间:2011-02-23 22:11:57

标签: math ip

我不是数学家所以这可能是一个愚蠢的问题...但是 - 有没有办法将IP地址转换为1到3之间的整数,从而有A)平均分配1,2和3和B)每个IP地址将始终转换为相同的整数? (实质上是一个哈希)。

我使用3作为示例 - 理想情况下我希望可以自定义范围限制。

$highest_allowed_integer = 3;
$integer = get_evenly_distributed_but_always_identical_integer($_SERVER["REMOTE_ADDR"],$highest_allowed_integer);

谢谢!

4 个答案:

答案 0 :(得分:7)

将整个IPv4地址视为基数为256的数字(表示4.3.2.1将转换为(4 << 24) + (3 << 16) + (2 << 8) + 1),然后将其修改为3,然后加1。

稍微偏离一点,你可能想要研究hashing的概念。

答案 1 :(得分:1)

ip2long ($_SERVER["REMOTE_ADDR"])%3;

答案 2 :(得分:1)

我不知道IP地址的分布或它们统一的重要性,但您可以尝试的一件事是将IP地址中的所有数字相加,然后将其修改为3. / p>

答案 3 :(得分:0)

是(只要你对“平等分配”的含义不太严格)。

其他人已经建议的简单方法涉及到 http://en.wikipedia.org/wiki/Modular_arithmetic其中3是“模数”。