@SiD15

Как будет выглядеть метод в C# System.String.GetHashCode() на PHP?

Пытаюсь получить такой же hash на PHP, как в данном примере rextester.com/JGN30101

Пошел смотреть исходный код метода System.String.GetHashCode() в Reference Source
Можно ли переписать его на PHP?
Нужно, чтобы hash был -2038622410

В поисках решения нашел функции на PHP аналогичные hashCode на Java, но результат другой

function hashCode64($str) {
    $str = (string)$str;
    $hash = 0;
    $len = strlen($str);
    if ($len == 0 )
        return $hash;
 
    for ($i = 0; $i < $len; $i++) {
        $h = $hash << 5;
        $h -= $hash;
        $h += ord($str[$i]);
        $hash = $h;
        $hash &= 0xFFFFFFFF;
    }
    return $hash;
}

function hashCode32( $s )
{
    $h = 0;
    $len = strlen($s);
    for($i = 0; $i < $len; $i++)
    {
        $h = overflow32(31 * $h + ord($s[$i]));
    }

    return $h;
}

function overflow32($v)
{
    $v = $v % 4294967296;
    if ($v > 2147483647) return $v - 4294967296;
    elseif ($v < -2147483648) return $v + 4294967296;
    else return $v;
}

if(PHP_INT_SIZE === 4)
{
   echo hashCode32('KD6267330');  // -1999504710
} else {
   echo hashCode64('KD6267330');  // 2295462586
}
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
@Fortop
Tech/Team lead
Вообще-то не рекомендуется этого делать

https://msdn.microsoft.com/en-us/library/system.ob...


You should not assume that equal hash codes imply object equality.

You should never persist or use a hash code outside the application domain in which it was created, because the same object may hash across application domains, processes, and platforms.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы