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. GDI+中发生一般性错误的解决办法

    这个错误经常发生,代码如下: private  static  byte[] GetBytes (Image image) { try { if (image == null) return null ...

  2. python des ecb 加密 demo

    # -*- coding:utf-8 -*- from pyDes import * def hexString2bytes(src): ret =[] for i in range(len(src) ...

  3. Mysql数据库的使用总结之Innodb简介(一)

       最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持.因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可.但也遇到了很多 ...

  4. JQuery 自动触发事件

    JQuery 常用模拟 有时候,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发click事件,而不需要用户去主动单击. 在JQuery中,可以使用trigger()方法完成模拟操 ...

  5. selenium+testng+ant+jenkins 手记

    会不会搭建测试平台是一般测试工程师和高级测试工程师分水岭 ----tobecrazy 我们项目有现成的测试平台,使用的是selenium grid+testng+ant+jenkins+VM 但是我平 ...

  6. node06-path

    目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...

  7. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  8. iOS之initialize与load

    initialize和load 这两个方法都是是什么时候调用的呢?都有着什么样的作用,下面看看吧! initialize +(void)initialize{ } 什么时候调用:当第一次使用这个类的时 ...

  9. 【Linux】Linux中常用操作命令

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/25 Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linu ...

  10. maven-replacer-plugin

    今天多认识了下这个maven插件. 基本用法: <plugin> <groupId>com.google.code.maven-replacer-plugin</grou ...