短网址简介
首先来温习下短网址的相关知识:
1、首先要了解什么是短网址?简单的说明是:把你认为长的难记或放不下的本站网址用本功能生成一个简短网址,使用短网址即可直接访问它。
2、其次它有什么用?你发布的或看到的有价值信息,可能需要发给QQ、MSN、论坛等里的好友或者进行宣传,那么就可以使用生成这个简短的网址。
3、目前大多数的在线缩短网址都提供有API的。在Twitter的等息有字数限制的微博客及其他社交网络中得到了广泛的使用。可以更方便地在电子邮件、社交网络、微博和手机上传播,避免折行或超出字符限制。
实现自己的短网址需要如下步骤:
1.定义您自己的网址映射算法。
2.有一个数据库来存储映射的网址。
3.从数据库的短网址的映射找到原始的URL
算法描述
1. 将长网址md5生成32位签名串,分为4段, 每段8个字节; 2. 对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3. 这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 4. 总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;
例如:引自链接 http://qn-lf.iteye.com/blog/1084516
public static string [] ShortUrl( string url)
{
//可以自定义生成MD5加密字符传前的混合KEY
string key = "Leejor" ;
//要使用生成URL的字符
string [] chars = new string []{
"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"
};
//对传入网址进行MD5加密
string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5" );
string [] resUrl = new string [4];
for ( int i = 0; i < 4; i++)
{
//把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算
int hexint = 0x3FFFFFFF & Convert.ToInt32( "0x" + hex.Substring(i * 8, 8), 16);
string outChars = string .Empty;
for ( int j = 0; j < 6; j++)
{
//把得到的值与0x0000003D进行位与运算,取得字符数组chars索引
int index = 0x0000003D & hexint; // 0x0000003D即61,索引范围为0-61
//把取得的字符相加
outChars += chars[index];
//每次循环按位右移5位
hexint = hexint >> 5;
}
//把字符串存入对应索引的输出数组
resUrl[i] = outChars;
}
return resUrl;
}
然后将生成的短网址和长URL对应关系存入数据库中,当用户访问短网址时,便可以在数据库中查询对应的长URL,数据库表如下:
CREATE TABLE mappedURL
(
shortCode char (6) not null ,
lognURL text not null ,
PRIMARY KEY shortCodeInd (shortCode),
);