преобразование хеш-значения (md5, sha1 и т. д.) в целое число в фиксированном диапазоне

1

Допустим, у меня есть хэш-функция md5, и я hash некоторые строки, и это дает мне некоторое значение, и мне нужно преобразовать его в целочисленное значение с фиксированным диапазоном.

Как указано здесь для алгоритма crc32() для преобразования md5 (или, может быть, другого метода хэширования?) В целое число, где можно установить возможные результирующие целые диапазоны (например: 1-10000)?

Например, скажем:

$value=md5("dog");
echo $value;

Output: "06d80eb0c50b49a509b49f2424e8c805"'

Теперь мне нужно преобразовать это значение в целое число, чтобы я мог использовать его в таблице поиска размером 1000. Таким образом, когда я его конвертирую, размер этого хеш-значения должен быть от 0 до 999. Как я могу это сделать?

  • 1
    Это будет справочная таблица с большим количеством совпадений, так что вы могли бы также использовать остаток по модулю / делению ( $crc % 1000 ).
  • 0
    если я создаю большую справочную таблицу, скажем, 100 миллионов записей для этого crc32 () не очень хороший вариант, хотя вы правы, но для большого объема данных мне нужно использовать md5.
Теги:
algorithm
hash
md5

1 ответ

1
Лучший ответ

Вы можете использовать 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 это к диапазону, например, в соответствии с оригинальным комментарием к вашему вопросу).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню