Я много пробовал, особенно для преобразования полной 64-битной шестнадцатеричной строки в 64-битное целое число со знаком. Теперь я закончил с этим:
function sha1_64bitInt($str) {
$u = unpack('N2', sha1($str, true));
return ($u[1] << 32) | $u[2];
}
Производительность где-то посередине. Намного лучше, чем реализация алгоритма полного хэширования (например, SimpleHash или dbj2), и намного медленнее, чем простой вызов sha1()
или crc32
.
Когда когда-нибудь будет лучшее решение для преобразования в 64-разрядное целое число, можно будет улучшить эту функцию без нарушения обратной совместимости (я надеюсь).