Если вам просто нужна хеш-функция для поиска в хеш-таблице, я рекомендую использовать Murmurhash .10 ^ 11 находится между 2 ^ 36 и 2 ^ 37.Поэтому, вызовите хеш, который генерирует 64-битный (Murmurhash2) или 128-битный (Murmurhash3) хеш, и мод 10 ^ 11.В отличие от простого преобразования базисов, использование хеш-функции может привести к конфликтам, даже если она сильно (если не идеально) распределена равномерно.Тем не менее, вы получите гораздо лучший эффект лавины. Здесь - результат теста на лавину.
Если Murmurhash невозможен, функции Jenkins lookup также хороши. Здесь - это результат лавинообразного теста.
Если производительность не является проблемой или требуется криптографическая защита, SHA-1 может быть лучшим выбором, который имеет гораздо больше оболочек на разных языках.,Не используйте CRC32 (плохая лавина).
РЕДАКТИРОВАТЬ : если вам нужна хэш-функция PHP, вот пример кода
function my_hash($user_id, $order_type)
{
// construct integer (10^11)
$data = $user_id * 10 + $order_type;
// convert decimal to raw binary string (at most 5 bytes)
$hex = dechex($data);
$binary = pack('H*', $hex);
// hash binary string. Substitute 'sha1' with other algorithms listed in http://www.php.net/manual/en/function.hash-algos.php if needed
$hash = hash('sha1', $binary);
// output first 8 bytes
return substr($hash, 0, 8);
}
echo my_hash(1234567890, 0); // 199f4bc7
echo my_hash(1234567890, 1); // f3706f03
Также есть Расширение PHP для Murmurhash2 .Вы можете скомпилировать и установить, если вы запускаете PHP на Linux.Замените эти файлы Murmurhash2 на Murmurhash3, может быть, даже лучше.