Как получить 64-битный целочисленный хеш из строки в PHP?

Мне нужны 64-битные целые хэши строк для чего-то вроде хэш-карты.

Мне кажется, что нет встроенной хеш-функции PHP, которая может возвращать 64-битные целые числа?

Я думаю, что можно взять первую часть хэша sha1 и преобразовать его в целое. Однако это не принесет лучших результатов, и преобразование кажется сложным.

Конечно, было бы неплохо использовать собственные PHP-функции без установки.

См. Эту страницу для информации о хеше md5:

http://us.php.net/manual/en/function.md5.php

Это выведет шестнадцатеричную строку с 32 символами. Каждый шестнадцатеричный символ представляет собой 4 бита данных. это означает, что вам нужно 16 шестнадцатеричных символов (или половина хеша md5) для генерации 64 бит.

вы можете использовать hexdec для преобразования 64 бит (16×4 = 64) из hex в int. Обратите внимание, что если вы используете более 64 бит, функция будет переполняться в тип float, чтобы попытаться представить большее число

http://php.net/hexdec

Итак, в основном

$stringToHash= "abcdefghijk..."; $hash = md5($stringToHash); $substring = substr($hash, 0,16); $finalInt = hexdec($substring); 

Это должно сработать для вас. (но я его не тестировал).

Я пробовал много, особенно для преобразования полной 64-разрядной шестнадцатеричной строки в подписанное 64-битное целое число. Теперь я закончил с этим:

 function sha1_64bitInt($str) { $u = unpack('N2', sha1($str, true)); return ($u[1] << 32) | $u[2]; } 

Производительность находится где-то посередине. Намного лучше, чем реализация полного алгоритма хеширования (например, SimpleHash или dbj2) и намного медленнее, чем голый вызов sha1() или crc32 .

Когда будет лучшее решение для преобразования в 64-битное целое число, можно будет улучшить эту функцию, не нарушая обратной совместимости (надеюсь).

Если у кого-то еще нет лучшей идеи, вы можете, вероятно, изменить murmurhash_php, чтобы очень легко вызвать 64-битную версию MurmurHash3 .

Думаю, PHP не поддерживает 64-битные целые числа. Существует класс BigInteger (не родной PHP), который вы могли бы использовать (и найти, действительно ли у вас Google действительно хорошо). Но он просто использует строки внутри, и это комплекс hella.

См. http://php.net/manual/ru/function.crc32.php#111699 для реализации CRC64.