Для 32-разрядной конденсации простое решение можно было бы сделать, выбрав 4 шестнадцатеричные пары (8 символов) хэша MD5, где каждая пара представляет один байт, и затем преобразовав это с intval()
.
Для 32-битного Int без знака:
$inthash = intval(substr(md5($str), 0, 8), 16);
Для положительного значения только 32-битного Int со знаком:
$inthash = intval(substr(md5($str), 0, 8), 16) >> 1;
Это, вероятно, будет работать только для значений до 64 бит (8 байт или 16 символов) для большинства современных систем, как указано в документации.
В системе, которая может вместить 64-битные Ints, стратегия разделения, которая использует весь 128-битный MD5-хэш, так как 2 Ints может выглядеть следующим образом:
$hash = md5($str);
$inthash1 = intval(substr($hash, 0, 16), 16);
$inthash2 = intval(substr($hash, 16, 16), 16);