我不是数学家所以这可能是一个愚蠢的问题...但是 - 有没有办法将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);
谢谢!
答案 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是“模数”。