php g_tk 算法实现

g_tk参数是腾讯在web产品上经常使用的一个参数。该参数一般用于:QQ空间、朋友网、QQ活动等地方。

g_tk是由cookie中的skey生成,网上有js、java、c#等语言的算法,但是貌似没有公开php算法。

昨天在sina sae开发一个应用,用到此参数,故改写了一下。现在分享给大家

function getGTK($cookie){

   $str = $cookie['skey'];

   $hash = 5381;

   $len = strlen($str);

   for($i = 0;$i < $len;$i++)

   {

   			$h = ($hash << 5) + utf8_unicode($str[$i]);

      $hash+=$h;

   }

   return $hash & 0x7fffffff;

}



function utf8_unicode($c) {

switch(strlen($c)) {

    case 1:

      return ord($c);

    case 2:

      $n = (ord($c[0]) & 0x3f) << 6;

      $n += ord($c[1]) & 0x3f;

      return $n;

    case 3:

      $n = (ord($c[0]) & 0x1f) << 12;

      $n += (ord($c[1]) & 0x3f) << 6;

      $n += ord($c[2]) & 0x3f;

      return $n;

    case 4:

      $n = (ord($c[0]) & 0x0f) << 18;

      $n += (ord($c[1]) & 0x3f) << 12;

      $n += (ord($c[2]) & 0x3f) << 6;

      $n += ord($c[3]) & 0x3f;

      return $n;

}

}

 

其中utf8_unicode函数可用ord代替

 

推荐一个很好的QQ协议研究论坛:www.qicq5.com

 

 

嘀咕cat

你可能感兴趣的:(PHP)