java实现对URL短地址压缩算法
public class ShortUrl {
public static void main(String[] args) {
String url = "http://www.sunchis.com";
for (String string : ShortText(url)) {
print(string);
}
}
public static String[] ShortText(String string){
String key = "XuLiang"; //自定义生成MD5加密字符串前的混合KEY
String[] chars = new String[]{ //要使用生成URL的字符
"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","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"
};
String hex = MD5Encode(key + string);
int hexLen = hex.length();
int subHexLen = hexLen / 8;
String[] ShortStr = new String[4];
for (int i = 0; i < subHexLen; i++) {
String outChars = "";
int j = i + 1;
String subHex = hex.substring(i * 8, j * 8);
long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);
for (int k = 0; k < 6; k++) {
int index = (int) (Long.valueOf("0000003D", 16) & idx);
outChars += chars[index];
idx = idx >> 5;
}
ShortStr[i] = outChars;
}
return ShortStr;
}
private static void print(Object messagr){
System.out.println(messagr);
}
}
测试结果
ShortText("http://www.sunchis.com")[0]; //得到值:Jzyqma
ShortText("http://www.sunchis.com")[1]; //得到值:QBrMzm
ShortText("http://www.sunchis.com")[2]; //得到值:bQreM3
ShortText("http://www.sunchis.com")[3]; //得到值:VNBRna
ruby实现对URL短地址压缩算法
require 'digest/md5'
def short_text string
key = "XuLiang"
chars = [*'a'..'z',*'0'..'9',*'A'..'Z']
hex = Digest::MD5.hexdigest(key+string)
hex_len = hex.length
sub_hex_len = hex_len/8
short_str = Array.new(4)
(0...sub_hex_len).each do |i|
out_chars = ""
j = i + 1
sub_hex = hex[i * 8...j * 8]
idx = 0x3FFFFFFF & sub_hex.to_i(16)
(0...6).each do |i|
index = 0x0000003D & idx
out_chars += chars[index]
idx = idx >> 5
end
short_str[i] = out_chars
end
return short_str
end
测试结果
p short_text("http://www.sunchis.com")
["Jzyqma", "QBrMzm", "bQreM3", "VNBRna"]
进行对比相同,完成ruby对短地址的实现,ruby写起来还是要简洁一点的。