新浪微博的id和mid互相转换(10进制和62进制转换)
2015-03-12 10:47
686 查看
对于62进制,从0数到9以后,10用小写字母a表示,接着数完26个字母,到z为35,然后36为大写字母A,一直到61为大写字母Z。
public class Base62 { public static void main(String[] args) { String id = "3791648100153353"; // 3791648100153353 String mid = Base62.encode(id); System.out.println("1:" + id + " ----> " + mid); String mid2 = "BCsbw0DTr"; // BCsbw0DTr String id2 = Base62.decode(mid2); System.out.println("2:" + id2 + " ----> " + mid2); } /* * 新浪微博的id和mid互相转换(10进制和62进制转换) * 在开始计算之前有必要说明一下,什么是base62编码。它实际上就是10进制和62位进制的互换。 * 对于62进制,从0数到9以后, * 10用小写字母a表示,接着数完26个字母,到z为35, * 然后36为大写字母A,一直到61为大写字母Z。 */ static String[] str62key = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; /** * id转换成mid(10进制 ---> 62进制) * <p> 3791648100153353 ---> BCsbw0DTr * <p> 对于一个id,从后向前每7位一组,用base62编码后,拼起来即可。 * <br> 要注意的是:每7个一组,除了开头一组,如果得到的62进制数字不足4位,需要在前面补0。 */ public static String encode(String i10) { String s62 = ""; for (int j = i10.length() - 7; j > -7; j = j - 7) {// 以7个数字为一个单位进行转换 int s = j < 0 ? 0 : j; int e = j + 7; String str = i10.substring(s, e); str = _10to62(Integer.valueOf(str)); if (s > 0) { // 若不是第一组,则不足4位补0 str = StringUtils.leftPad(str, 4, "0"); } s62 = str + s62; } return s62; } /** * mid转化成id的(62进制 ---> 10进制) * <p> BCsbw0DTr ---> 3791648100153353 * <p> 对于一个mid,从后向前每4位一组,用base62解码后,拼起来即可。 * <br> 要注意的是:每4个一组,除了开头一组,如果得到的10进制数字不足7位,需要在前面补0。 */ public static String decode(String s62) { String i10 = ""; for (int i = s62.length() - 4; i > -4; i = i - 4) {// 分别以4个为一组 int s = i < 0 ? 0 : i; int e = i + 4; String str = s62.substring(s, e); str = _62to10(str);// 62进制的转化成10进制的数 if (s > 0) { // 若不是第一组,则不足7位补0 str = StringUtils.leftPad(str, 7, "0"); } i10 = str + i10; } return i10; } /** * 62进制转换成10进制 */ private static String _62to10(String str) { String i10 = "0"; int c = 0; for (int i = 0; i < str.length(); i++) { int n = str.length() - i - 1; String s = str.substring(i, i + 1); for (int k = 0; k < str62key.length; k++) { if (s.equals(str62key[k])) { c += (int) (k * Math.pow(62, n)); break; } } i10 = String.valueOf(c); } return i10; } /** * 10进制转换成62进制 */ private static String _10to62(int int10) { String s62 = ""; int w = int10; int r = 0; int a = 0; while (w != 0) { r = (int) (w % 62); s62 = str62key[r] + s62; a = (int) (w / 62); w = (int) Math.floor(a); } return s62; } }
相关文章推荐
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- C++作业02_01: 新浪微博的消息 ID ( MID ) 有字符型和数字型两种形态,可以互相转换
- 10进制与62进制互相转换
- 10进制和36进制互相转换
- java将16进制与10进制互相转换
- 10进制与62进制互相转换
- 十进制(10)与64进制互相转换算法
- 10进制与16进制互相转换
- java中进行2、8、16、10进制之间的转换
- 透明度10进制转换成16进制
- 自己实现itoa(),10进制到2~36进制的转换
- c# 2进制、8进制、10进制、16进制之间的转换
- c# 中 2进制、8进制、10进制、16进制...各种进制间的轻松转换
- 16进制 10进制 BCD码之间的转换
- 10进制数和16进制字符串 相互转换
- ID--HANDLE--HWND三者之间的互相转换(转)
- itoa()函数,10进制转换到(2~36)进制
- 2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)