您的位置:首页 > 其它

新浪微博mid base62进制转10进制

2017-03-24 18:21 76 查看
最近写了新浪微博的base62的mid转换成10进制的函数,首先先解释一下这个转换有什么用。

问题提出:前端插入微博信息时使用的是10进制的mid,但是weibo文章url使用的是base62的mid,所以就需要转换:

eg:

http://weibo.com/2656274875/EAbms0SA3?from=page_1002062656274875_profile&wvr=6&mod=weibotime

base64的mid即为 EAbms0SA3

前端使用的id一般为十进制的,所以需要转换,而且其转换方法为从后向前,每四位一取。

转换为10进制的后从前往后拼接;

例如:EAbms0SA3

取得方法是

0SA3

Abms

E

依次转为

0209811

8623484

40

最后拼接为 4086234840209811

以下附上php实现代码,供大家参考。

<?php

class Weibo_Helper{

public static function from62to10($num){
$str62keys = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$i10 = 0;
for($i = 0; $i < strlen($num); $i++)
{
$n = strlen($num) - $i - 1;
$s = $num[$i];
$i10 += strpos($str62keys, $s) * pow(62, $n);
}

return $i10;
}

public static function weiboMid62to10($url){
$mid = "";
$length = strlen($url);
for($i = $length-4; $i>-4; $i = $i-4)
{
$offset1 = $i<0?0:$i;
$offset2 = 4;
$str = substr($url, $offset1, $offset2);
$url = substr($url, 0, $offset1);
$str = self::from62to10($str);
echo $str."<br>";
if($offset1 > 0)
{
while(strlen($str) < 7)
{
$str = '0'.$str;
}
}

$mid = $str.$mid;
echo $str."<br/>";
}

return $mid;
}

}

$url = "EAbms0SA3";

$t = Weibo_Helper::weiboMid62to10($url);
var_dump($t);

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 url 新浪微博