短网址已经很常见了,尤其是在微博中常见到的t.cn/...那么他们是怎么实现的呢,url是怎么缩短的呢?
其实url并不能缩短,或者说短网址并不是依靠将url“压缩”来实现的
它只不过是将你的长url存在一个地方,然后给你一把“钥匙”。拿着这把钥匙,就可以得到原来的长网址。
先来分析一下短网址的构成
1.百度 http://dwz.cn/6qgIGV
2.新浪 http://t.cn/RCOA2SS
都是一个很短的域名后面加一段字母和数字混合,以新浪为例,一共7位。9个数字加26个字母,再加上大小写,就可以有3521614606208种变化,也就是3万亿。所以短时间内并不用担心不够用
下面就用js来简单实现下url的encode和decde,在线演示地址http://jsrun.net/3piKp/edit
let urls={}
var encode = function(longUrl) {
//生成7位hash码并转成数组
var hash=Math.random().toString(36).substr(2,7).split('');
for(let i=0;i<hash.length;i++){
//部分小字母转大写
hash[i]=Math.random()>0.5?hash[i].toUpperCase():hash[i];
}
//数组转为字符串
hash=hash.join('');
将hash存在urls中
urls[hash]=longUrl;
return 'http://tinyurl.com/'+hash;
};
/**
* 将短url还原
*
* @param {string} shortUrl
* @return {string}
*/
var decode = function(shortUrl) {
//取得hash值并返回url
return urls[shortUrl.split('http://tinyurl.com/')[1]];
};