mid为62进制编码,id为常见的10进制编码。

id从低位到高位,7个数字为一组,转换为62进制,并顺序合并,即转换为mid。

mid从地位到高位,4个字母为一组,转换为10进制,并右移7位,计算和,得到id。

7位的10进制数最大为9999999,转换为62进制后为FXsj;8位的10进制数最大为99999999,转换为62进制后为9FXsj。

7位分隔10进制数,能保证最多获得4位62进制数。

参考了http://blog.csdn.net/dier4836/article/details/7827908,但是他的mid计算id有问题。

package com.founder.weibocrawler.util;

public class WeiboIDUtils {

    public static void main(String[] args) {
System.out.println(Mid2Id("D5DVt7A9n"));
System.out.println(Id2Mid("3913451191807261"));
} public static String Mid2Id(String mid) {
long id = 0L;
// 从最后往前以4字节为一组读取字符
int count = 0;
for (int i = mid.length() - 4; i > -4; i = i - 4) {
int offset = i < 0 ? 0 : i;
int len = i < 0 ? mid.length() % 4 : 4;
String str = Encode62ToLong(mid.substring(offset, offset + len)).toString();
// 不足7位补0
if (offset != 0)
str = String.format("%07d", Long.valueOf(str));
id = (long) (Long.valueOf(str) * Math.pow(10, 7 * count) + id);
count++;
}
return id + "";
} public static String Id2Mid(String id) {
String mid = "";
for (int i = id.length() - 7; i > -7; i = i - 7) {
int offset = i < 0 ? 0 : i;
int len = i < 0 ? id.length() % 7 : 7;
String str = LongToEnode62(Long.valueOf(id.substring(offset, offset + len)));
mid = str + mid;
}
return mid;
} private static String str62keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static Long Encode62ToLong(String str62) {
long long10 = 0;
for (int i = 0; i < str62.length(); i++) {
double n = str62.length() - i - 1;
long10 += Long.valueOf(str62keys.indexOf(str62.substring(i, i + 1)) * (long) Math.pow(62, n) + "");
}
return long10;
} public static String LongToEnode62(long long10) {
String str62 = "";
int offset = 0;
while (long10 != 0) {
offset = Integer.valueOf(long10 % 62 + "");
str62 = str62keys.substring(offset, offset + 1) + str62;
long10 = (long) Math.floor(long10 / 62.0);
}
return str62;
}
}

微博mid和id转换的更多相关文章

  1. 微博地址url(id)与mid的相互转换

    关键字:新浪 微博 url id mid 互相转换地址:http://www.cnblogs.com/txw1958/archive/2012/12/07/weibo-id-to-mid.html 通 ...

  2. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  3. javascript实现新浪微博MID与地址转换

    新浪微博每一条微博都会有一个mid,然后每条微博都有一个独立的地址,例如:http://www.weibo.com//Bw3SXzWzP 规律:地址中的黄色部分是用户id,绿色部分是微博的识别字符串, ...

  4. 基因id转换

    DAVID网站提供了id转换的功能 1 选择上传gene list文件 2 选择上传ID的类型,我们ID-list.txt中的是Ensembl Gene ID,所以这里选ENSEMBL_GENE_ID ...

  5. 常用Gene ID转换工具--转载

    在自己的研究工作中,经常会遇到一些需要对Gene ID进行转换的情况.目前存在着大量的生物信息数据库,每个数据库都有自己定义的ID命名规则,转换起来实在是一个很大的工作.举个例子,之前构建的Human ...

  6. 字符串ID转换成字符串名字

    select  U.CnName+','  from f_splitstr('1828,1055333,1,1035681,752,494,22549,219,23860,478,23453,677, ...

  7. ABAP 将SAP用户ID转换成用户名

    FORM frm_coverted_name USING usrid TYPE sy-uname                        CHANGING name TYPE adrp-name ...

  8. 微博转发关系采集,可拓展关键字采集,评论采集(Java版)

    微博模拟登录获取cookis,配置采集深度,采集一条微博转发关系页面,同时解析页面,生成一条微博的传播图,数据集可做微博影响力分析和传播分析 gitthub:https://github.com/ch ...

  9. [iOS微博项目 - 3.0] - 手动刷新微博

    github: https://github.com/hellovoidworld/HVWWeibo   A.下拉刷新微博 1.需求 在“首页”界面,下拉到一定距离的时候刷新微博数据 刷新数据的时候使 ...

随机推荐

  1. 【krpano】krpano xml资源解密(破解)软件说明与下载(v1.2)

    欢迎加入qq群551278936讨论krpano技术以及获取最新软件.   该软件已经不再维护,现在已经被KRPano资源分析工具取代,详情参见 http://www.cnblogs.com/reac ...

  2. How to install OpenBazaar Server in CentOS7

    helps from: https://github.com/OpenBazaar/OpenBazaar-Server http://stackoverflow.com/questions/24917 ...

  3. HTML5 声明兼容IE的写法(转载)

    HTML5 声明兼容IE的写法(转载)   1 2 3 4 5 6 7 8 9 10 <!DOCTYPE html> <!--[if IE]> <meta http-eq ...

  4. LeetCode 219 Contains Duplicate II

    Problem: Given an array of integers and an integer k, find out whether there are two distinct indice ...

  5. JS中多种方式创建对象

    1.内置对象创建 var girl=new Object(); girl.name='hxl'; console.log(typeof girl); 2.工厂模式,寄生构造函数模式 function ...

  6. Jetty使用教程(四:28-30)—Jetty开发指南

    二十八.延续机制支持 28.1 延续简介 延续是一种机制用来实现类似于Servlet 3.0异步功能的异步Servlet,但提供了一个简单易操作的接口. 28.1.1 为什么使用异步Servlets ...

  7. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. UML学习(一)-----用例图

    1.什么是用例图 用例图源于Jacobson的OOSE方法,用例图是需求分析的产物,描述了系统的参与者与系统进行交互的功能,是参与者所能观察和使用到的系统功能的模型图.它的主要目的就是帮助开发团队以一 ...

  9. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  10. Unity4.0的使用

    最近公司用到了Unity,自己就研究了一下. 新建一个ASP.NET MVC基本项目,在NuGet上引入Unity4.0.1最新版. 因为我使用的项目为ASP.NET MVC,所以又添加一个Unity ...