Допустим, у меня есть хэш-функция md5, и я hash некоторые строки, и это дает мне некоторое значение, и мне нужно преобразовать его в целочисленное значение с фиксированным диапазоном.
Как указано здесь для алгоритма crc32()
для преобразования md5 (или, может быть, другого метода хэширования?) В целое число, где можно установить возможные результирующие целые диапазоны (например: 1-10000)?
Например, скажем:
$value=md5("dog");
echo $value;
Output: "06d80eb0c50b49a509b49f2424e8c805"'
Теперь мне нужно преобразовать это значение в целое число, чтобы я мог использовать его в таблице поиска размером 1000. Таким образом, когда я его конвертирую, размер этого хеш-значения должен быть от 0 до 999. Как я могу это сделать?
Вы можете использовать base_convert, чтобы изменить шестнадцатеричный вывод из md5 в десятичный, а затем использовать функцию bcmod для преобразования этого числа в число в выбранном вами диапазоне:
<?php
$valuetohash = "dog";
$range = 1000;
$hashslot = bcmod(base_convert(md5($valuetohash), 16, 10), $range);
echo $hashslot;
Выход: 26
Меняя "собаку" на "попугай", выдает 800, меняя ее на "кошку", получается 260 (что забавно показывает, что кошки в 10 раз лучше собак).
Обратите внимание: если вы используете другой хеш, который не отображает "большой шестнадцатеричный номер", например, crc32-карты для целого числа, вам нужно будет сделать это по-другому (в случае crc32 вы можете просто прямому mod mod это к диапазону, например, в соответствии с оригинальным комментарием к вашему вопросу).
$crc % 1000
).