>  기사  >  백엔드 개발  >  BKDRHash php兑现

BKDRHash php兑现

WBOY
WBOY원래의
2016-06-13 13:04:261006검색

BKDRHash php实现
接上一帖 BKDRHash的php实现 比c语言版本复杂的部分,是由于php中整型数的范围是,且一定是-2147483648 到2147483647,并且没有无符号整形数,在算法中会出现大数溢出的问题,不能使用intval,需要用floatval,同时在运算过程中取余保证不溢出。

<?php

function BKDRHash($str)
{
	$seed = 131; // 31 131 1313 13131 131313 etc..
	$hash = 0;
	
	$cnt = strlen($str);

	for($i = 0; $i < $cnt; $i++)
	{
		
		$hash = ((floatval($hash * $seed) & 0x7FFFFFFF) + ord($str[$i])) & 0x7FFFFFFF;
		
	}
	return ($hash & 0x7FFFFFFF);
}
echo BKDRHash('ggsonic');//1471979560
echo BKDRHash('asdfasdfasdf123'); // 1220655578

?>

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.