文档章节

短网址的简单实现

inidcard
 inidcard
发布于 2016/07/18 10:27
字数 772
阅读 3
收藏 0

 短网址,忽然一下子就冒出来的东西,长长的一个URL,提交过去,出来就只有短短的一个URL了,看起来似乎挺神奇,其实简单分析一下,明白其中的原理,也是一件很简单的事情。 

短网址的名称网上叫的有很多种,网址缩短、网址压缩什么什么的,原理说白了就跟您带了一包东西去超市购物,进超市前把东西塞到超市的储物柜,然后拿到一个号码牌,您进超市就不用再背一大包东西了,只需要拿着一个小小的号码牌,出来时再把号码牌还回去,把您的背包拿出来,是一个道理。 

知道原理,我们实现起来就简单了很多,无非就是接收一个URL,然后分配一个号码,当有人读取这个号码时,我们再把对应的URL调出来并重定向,就完事了。 

所以表其实很简单,简单到只需要两个字段,一个自增ID,一个URL地址。 

这里我就不写出详细的代码了,简单的增删改查这种最基本的操作相信大家应该都会。 

那这样我们提交一个URL,得到的URL就类似:http://9520.me/10086 

看起来似乎就完成了,其实不然,我们拿到的自增ID是一个10进制的数字,而我们看到的大多数短网址后面的参数肯定不是全数字的,而是带了字母的,毕竟10进制表示的话,数据量上来后还是会显得有点长,那我们就可以把字母也用上吧,大小写字母加数字,相当于是62进制,那我们还需要再实现一个进制转换的方法来对ID进行压缩,进制转换其实也是很简单的东西,明白原理的随手都可以写出来,不明白的随便搜索一下也能写出来,这里我就把我自己的实现列出来吧,如果大家有更好的实现,不妨留言告诉我。 


static
string Number = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /// <summary> /// 压缩ID标识 /// </summary> /// <param name="n"></param> /// <returns></returns> public string Short(long n) { string result = string.Empty; int l = Number.Length; while (n / l >= 1) { result = Number[(int)(n % l)] + result; n /= l; } result = Number[(int)n] + result; return result; } /// <summary> /// 还原ID标识 /// </summary> /// <param name="s"></param> /// <returns></returns> public long UnShort(string s) { long result = 0; if (s.HasValue()) { s = s.Trim(); int l = s.Length; int m = Number.Length; for (int x = 0; x < l; x++) { result += Number.IndexOf(s[l - 1 - x]) * (long)Math.Pow(m, x); } } return result; }

 

那我们刚才的URL:http://9520.me/10086,经过压缩后就变成了:http://9520.me/2CG,少了两个字母,当然,数字越大时效果越明显。

 OK,明白了原理后,相信您自己做一个短网址的网站也不难了吧,难的只是有一个短的域名而已了。

要是觉得对您有帮助不妨点一下推荐吧,有什么想法或建议可以留言一起讨论噢~~~

 

本文转载自:http://www.cnblogs.com/robot/archive/2012/12/14/2818268.html

共有 人打赏支持
inidcard
粉丝 1
博文 110
码字总数 8101
作品 0
东城
程序员
私信 提问
Google短网址的API

2009年底,Google发布了短网址服务goo.gl。 Google声称: "......(这是)互联网上最稳定、最安全、最快速的短网址服务。" 有人做了比较,证明确实如此。 从上图可以看到,goo.gl的响应和跳转...

阮一峰
2011/01/16
0
0
URL短地址压缩算法 微博短地址原理解析 (Java实现)

最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有...

神勇小白鼠
2014/07/29
0
0
短网址服务(TinyURL)生成算法

前不久做了一个优惠劵的分享功能,其中一个功能就是生成一个优惠劵分享短链接。生成的短链接要求每个链接都是唯一的,并且长度尽可能短。在网上查了一下相关的思路,发现了一个不错的算法。这...

浮云骑士LIN
2018/08/23
0
0
微博短网址原理的算法

短网址一直都在微博上应用。例如腾讯微博的短网址url.cn,新浪的sinaurl.cn等。 他们是如何实现呢,我在网上看了一下,大多是下面的一些思路: 例如:http://url.cn/1zJdGX?type=1&from=19&u...

疯狂的流浪
2012/12/10
13.6K
29
短网址还原的Bookmarklet

如今,很多网站提供短网址服务。 但是有时候,我们需要知道真实网址是什么。 一个个点击,实在太麻烦。何况在国内,很多网址是点不开的。 我一直希望,有人做一个通用接口,提供所有短网址的...

阮一峰
2011/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
1
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部