ホームページ  >  記事  >  バックエンド開発  >  BKDRHash PHPキャッシュアウト

BKDRHash PHPキャッシュアウト

WBOY
WBOYオリジナル
2016-06-13 13:04:261006ブラウズ

BKDRHash php 実装
前回の投稿に引き続き、PHP での BKDRHash の実装は 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 までご連絡ください。