Home > Article > Backend Development > PHP Hash algorithm: Times33 algorithm code example_PHP tutorial
This article mainly introduces the PHP Hash algorithm: Times33 algorithm code example. This article directly gives the implementation code. Friends who need it can refer to it. Next
I recently read a book and mentioned some Hash algorithms. What impressed me most was Times33. I didn’t understand it very well at the time, so I wrote a program today to verify it.
First enter the code:
Copy the code. The code is as follows:
/**
* CRC32 Hash function
* @param $str
* @return int
*/
Function hash32($str)
{
return crc32($str) >> 16 & 0x7FFFFFFF;
}
/**
* Times33 Hash function
* @param $str
* @return int
*/
Function hash33($str)
{
$hash = 0;
for($i=0; $i
$hash = 33 * $hash ord($str{$i});
}
return $hash & 0x7FFFFFFF;
}
$n = 10;
// Test Case 1
$stat = array();
for($i=0; $i<10000; $i ){
$str = substr(md5(microtime(true)), 0, 8);
$p = hash32($str) % $n;
if(isset($stat[$p])){
$stat[$p] ;
}else{
$stat[$p] = 1;
}
}
print_r($stat);
// Test Case 2
$stat = array();
for($i=0; $i<10000; $i ){
$str = substr(md5(microtime(true)), 0, 8);
$p = hash33($str) % $n;
if(isset($stat[$p])){
$stat[$p] ;
}else{
$stat[$p] = 1;
}
}
print_r($stat);
There are two test cases above. The first one uses the CRC32 method; the second one is the Times33 algorithm implementation.
Effect:
The result distribution is similar between the two algorithms (it is probably a problem with the data source, md5 only has 0-f). There are also articles saying that CRC32 is more evenly distributed (reference link:)
But it is time consuming, CRC32 is nearly twice as fast as Times33.
Why 33?
It is a prime number (prime number) and an odd number. In addition to 33, there are 131, 1313, 5381, etc. PHP's built-in Hash function uses 5381, which was also mentioned in a blog post by "Brother Bird".