`
xkorey
  • 浏览: 150775 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

短ID生成基于62进制

阅读更多
下午突然想到要做一个生成基于62进制的短ID,网上找了一些资料,

说到用到辗除法,于是实现了一下。不知道正不正确,

数字和字符串能够相互转换。

贴在这里留做以后备用。



public class ShortId {

	private final char[] str = { '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' };
	
	private final String _str=new String(str);

	int len = str.length; 

	public String toStr(long num) {
		if(num<len){
			return ""+str[(int)num];
		}
		int a = (int)num%len;
		int b = (int)num/len;
		char e=str[a];
		if(b>=len){
			return ""+toStr(b)+e;
		}else{
			return ""+str[b]+e;
		}
	}

	public long toNum(String s) {
		int a = s.length()-1;
		long val=0;
		for(int i=a;i>=0;i--){
			char c = s.charAt(i);
			val += (_str.indexOf(c)*Math.pow(len, a-i));
		}
		return val;
	}

	public static void main(String[] args) {
		ShortId s64 = new ShortId();
		long num=45236;
		String enCode=s64.toStr(num);
		long deCode = s64.toNum(enCode);
		System.out.println("短Id是:"+enCode);
		System.out.println("Id是:"+deCode);
	}

          

}

输出:

短Id是:bLC
Id是:45236
0
0
分享到:
评论
1 楼 yixiandave 2014-08-30  
不喜欢写一长串char[]。。。直接写一个String然后调charAt效率应该差不多吧

相关推荐

Global site tag (gtag.js) - Google Analytics