各大微博短网址(ShortUrl)的算法 C#
短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn等。
我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx
为什么要这样做的,原因我想有这样几点:
1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖seqing,暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料)
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;
很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。
下面来看看程序部分:
现在可以直接使用该方法,可以等到下面四组值
ShortUrl(http://www.me3.cn")[0]; //得到值fAVfui
ShortUrl("http://www.me3.cn")[1]; //得到值3ayQry
ShortUrl("http://www.me3.cn")[2]; //得到值UZzyUr
ShortUrl("http://www.me3.cn")[3]; //得到值36rQZn 1 楼 niuky 2011-03-08 有没有Java版本的?
2 楼 zc0604 2011-08-27 string hex=
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");
这一部分可以用我写的这个将url的md5的值算出后得到String类型。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class md5Test {
/**
* wolf
* @param args
* @throws NoSuchAlgorithmException
*/
public static String getMD5OfStr(String url) {
// TODO Auto-generated method stub
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
md5.update(url.getBytes());
byte[] result=new byte[16];
result=md5.digest();
StringBuilder builder=new StringBuilder();
for(int i=0;i<result.length;i++)
builder.append((new String()).format("%02x", result[i]));
return builder.toString();
}
}