php的各种hash算法实现

作者: siediyer 分类: PHP 发布时间: 2013-04-24 11:34
<?php
function DJBHash($str) // 0.22
{
$hash = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash += ($hash <<5 ) + ord($str[$i]);
}
return $hash % 701819;
}

function ELFHash($str) // 0.35
{
$hash = $x = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash = ($hash <<4) + ord($str[$i]);
if(($x = $hash & 0xf0000000) != 0)
{
$hash ^= ($x>> 24);
$hash &= ~$x;
}
}
return $hash % 701819;
}

function JSHash($str) // 0.23
{
$hash = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash ^= (($hash <<5) + ord($str[$i]) + ($hash>> 2));
}
return $hash % 701819;
}

function SDBMHash($str) // 0.23
{
$hash = 0 ;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash = ord($str[$i]) + ($hash <<6 ) + ($hash <<16 ) - $hash;
}
return $hash % 701819;
}

function APHash($str) // 0.30
{
$hash = 0 ;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
if (($i & 1 ) == 0 )
{
$hash ^= (($hash <<7 ) ^ ord($str[$i]) ^ ($hash>> 3 ));
}
else
{
$hash ^= ( ~ (($hash <<11 ) ^ ord($str[$i]) ^ ($hash>> 5)));
}
}
return $hash % 701819;
}

function DEKHash($str) // 0.23
{
$n = strlen($str);
$hash = $n;
for ($i = 0; $i <$n; $i++)
{
$hash = (($hash <<5) ^ ($hash>> 27)) ^ ord($str[$i]);
}
return $hash % 701819;
}

function FNVHash($str) // 0.31
{
$hash = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash *= 0x811C9DC5;
$hash ^= ord($str[$i]);
}
return $hash % 701819;
}

function PJWHash($str) // 0.33
{
$hash = $test = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash = ($hash <<4) + ord($str[$i]);
if(($test = $hash & -268435456)  != 0)
{
$hash = (( $hash ^ ($test>> 24)) & (~-268435456));
}
}
return $hash % 701819;
}

function PHPHash($str) // 0.34
{
$hash = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash = ($hash <<4) + ord($str[$i]);
if (($g = ($hash & 0xF0000000)))
{
$hash = $hash ^ ($g>> 24);
$hash = $hash ^ $g;
}
}
return $hash % 701819;
}

function OpenSSLHash($str) // 0.22
{
$hash = 0;
$n = strlen($str);
for ($i = 0; $i <$n; $i++)
{
$hash ^= (ord($str[$i]) <<($i & 0x0f));
}
return $hash % 701819;
}

function MD5Hash($str) // 0.050
{
$hash = md5($str);
$hash = $hash[0] | ($hash[1] <<8 ) | ($hash[2] <<16) | ($hash[3] <<24) | ($hash[4] <<32) | ($hash[5] <<40) | ($hash[6] <<48) | ($hash[7] <<56);
return $hash % 701819;
}

?>

 
原作者说md5hash的效率最高。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Title - Artist
0:00