原理:
例如链接为 http://wx1.sinaimg.cn/mw690/9d0d09abgy1fj0wcs7aewj20ij0sn12y.jpg 的图
提取文件名 9d0d09abgy1fj0wcs7aewj20ij0sn12y,前 8 位 9d0d09ab 用 16 进制转换下变为 2634877355,就是用户 uid
如果是 http://wx1.sinaimg.cn/mw690/006r2HqOgy1fj7dxg3zuxj30p02a1wry.jpg 这种 005 006 开头的就用 62 进制转
为什么出现这个应该是发现 8 位 16 进制存不下了。。。。
php源代码
//微博图片地址
$pic = "https://wx1.sinaimg.cn/mw690/9e5389bbly1fyb2xgluy0j20go0m8q8x.jpg";
$pic = "http://wx1.sinaimg.cn/mw690/006r2HqOgy1fj7dxg3zuxj30p02a1wry.jpg";
$name = basename($pic);
//取得前8位
$name = substr($name,0,8);
//判断是不是005/006开头
if(preg_match('/^00[5|6]/',$name)){
//62 进制转10
$name = substr($name,2); //去掉前面的0
$uid = from62to10($name);
}else{
//16 进制转10
$uid = hexdec($name);
}
echo "微博:http://weibo.com/u/".$uid;
function from62to10($str){
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($str);
$dec = 0;
for($i = 0;$i<$len;$i++){
//找到对应字典的下标
$pos = strpos($dict, $str[$i]);
$dec += $pos*pow(62,$len-$i-1);
}
return $dec;
}