Как преобразовать IP-адрес в целое число от 1 до 3? - PullRequest
1 голос
/ 24 февраля 2011

Я не математик, так что это может быть глупым вопросом ... но - есть ли способ перевести 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 ]

7 голосов
/ 24 февраля 2011

Обрабатывать весь адрес IPv4 как число в базе 256 (это означает, что 4.3.2.1 будет переводиться в (4 << 24) + (3 << 16) + (2 << 8) + 1), затем изменить его на 3, а затем добавить 1.

В небольшом отступлении,Возможно, вы захотите изучить концепцию хеширования .

1 голос
/ 24 февраля 2011

Я не знаю распределение IP-адресов или насколько важно, чтобы они были единообразными, но вы могли бы попытаться сложить все цифры в IP-адресе, а затем изменить их на 3.

1 голос
/ 24 февраля 2011

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

0 голосов
/ 24 февраля 2011

Да (если вы не слишком строги к тому, что означает "равное распределение").

Простой способ, который уже предложили другие люди, включает http://en.wikipedia.org/wiki/Modular_arithmetic, где 3 - это "модуль"».

...