Home >Backend Development >PHP Tutorial >PHP hash function compatible with both 32-bit and 64-bit machines_PHP tutorial

PHP hash function compatible with both 32-bit and 64-bit machines_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:38:06813browse

Times are progressing and society is developing. The emergence of 64-bit machines has caused the shift calculation to no longer easily overflow. This is certainly a happy thing. However, during the system migration, 64-bit machines were suddenly discovered. The result obtained by the hash function was actually different from the 32-bit result. I was shocked and quickly studied the algorithm and found that it was a problem with the shift operation sign.
I had no choice but to judge the system and rewrite the algorithm for 64-bit machines. The code is as follows:

if (exec("getconf LONG_BIT") == "32") {
 function _hash($apszData = "", $MAX_TABLE_NUM = 0) {
  $_hash = $x = $i = 0;
  for($i = 0; $i < strlen($apszData); $i++) {
   $_hash = ($_hash << 4) + ord($apszData[$i]);
   if (($x = $_hash &0xF0000000) != 0) {
    $_hash ^= ($x >> 24);
    $_hash &= ~$x;
   }
  }
  return ($_hash &0x7FFFFFFF) % $MAX_TABLE_NUM + 1;
 }
} else {
 function _hash($apszData = "", $MAX_TABLE_NUM = 0) {
  $hash = $x = $i = 0;
  for($i = 0; $i < strlen($apszData); $i++) {
   $hash = ($hash << 4) + ((ord($apszData[$i])) << 32);
 
   if (($x = $hash &0xF000000000000000) != 0) {
    $hash ^= $x >> 24;
    $hash &= (~$x) &0xFFFFFFFF00000000;
   }
  }
 
  $ret = ($hash &0x7FFFFFFF00000000) % ($MAX_TABLE_NUM << 32) + (1 << 32);
  $ret >>= 32;
  $ret &= 0xFFFFFFFF;
  return $ret;
 }
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/735127.htmlTechArticleThe times are progressing and society is developing. The emergence of 64-bit computers has caused the shift calculation to no longer easily overflow. This is certainly something to be happy about, but during the system migration, I suddenly discovered a 64-bit machine...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn