短网址,忽然一下子就冒出来的东西,长长的一个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,明白了原理后,相信您自己做一个短网址的网站也不难了吧,难的只是有一个短的域名而已了。

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

 

posted @ 2012-12-14 16:25 I,Robot 阅读(9865) 评论(58) 推荐(22) Edit
上篇文章中我们已经解决ajax请求调用业务类方法带参数的问题,但很多业务类的方法我们肯定是不希望暴露给ajax请求的,这篇文章我们就来解决请求方法授权的问题。 Read More
posted @ 2012-04-16 01:48 I,Robot 阅读(2621) 评论(5) 推荐(5) Edit
上篇文章中有朋友回复说接收的参数只支持Form提交的数据,能不能加上QueryString?当然是可以的,所以我们在这里引入了特性Attribute,用来解决传入参数的取值问题。 Read More
posted @ 2012-03-09 02:43 I,Robot 阅读(3018) 评论(20) 推荐(23) Edit
上一篇文章中我们简单的实现了指定Url可以调用某个C#方法的功能,但有的朋友提到了,如果带参数的方法该怎么调用呢?这正是这篇文章要说到的内容。 Read More
posted @ 2012-03-08 01:41 I,Robot 阅读(4353) 评论(18) 推荐(5) Edit
相信不少朋友在刚接触WebForm编程的时候都有过这样的想法,为什么在.aspx页面的Javascript中不能直接调用到.aspx.cs文件中的方法?这篇文章所介绍的内容与这个问题有点关系,但并没有真正的解决Javascript直接调用C#的方法这个问题,只是通过其它的方式让我们前端与后端的交互实现起来能更简单些 Read More
posted @ 2012-03-07 02:29 I,Robot 阅读(11170) 评论(64) 推荐(19) Edit
打开google,发现logo又有新玩意了,又是动画,简单看了一下,还是原来的老样子,将图片一部分一部分的显示出来做成动画效果,粗略估计了一下,功能应该挺简单的,隔了好久没手写js了,手痒痒,于是准备动手写几行代码看看 Read More
posted @ 2011-10-12 03:41 I,Robot 阅读(6897) 评论(70) 推荐(63) Edit
折腾了几天,终于请到了一个客服来上夜班,嘿嘿!新来的客服叫小美,以后晚上就是小美来值班了哦… Read More
posted @ 2011-09-05 04:19 I,Robot 阅读(664) 评论(0) 推荐(2) Edit
第一次接触编程,应该从学生时代说起了,当时学习成绩很差,排名在全班倒数10名以内,但却有一门课“单片机”成绩却在班上排名第一,这让班主任很诧异。时隔多年,已经记不清当时学的是些什么东西了,就是些指令集,做了件自己觉得最牛X的事就是写了将近600行的代码拿到实验室去试验,结果录了2节课的时间才把指令全部录入到模拟的设备里去,而实现的效果,仅仅展示了不到一分钟。 毕业后的第一份工作,完全跟程序不搭界,渐渐的也把这些东西遗忘了,后来碰到一个同事,喜欢折腾电脑,也写写代码,当然,那是很早的事了,大概是03年左右去了,但那时我连电脑都没有,也谈不上编程了。后来在这位同事的帮助下,组装了一台电脑,当然不. Read More
posted @ 2011-08-11 03:27 I,Robot 阅读(3090) 评论(41) 推荐(9) Edit
这一天,终究还是到了,中午吃饭,没有说太多。下午,开始收拾东西,该扔的扔了,该放着的放着,该带走的带走。突然,感觉到那么一丝不自在,回头望了一眼,大家都各自忙着。起身,提起袋子,说了一声再见,我就仓促的夺门而出。我不敢拉着大家照张合影留念,因为我怕照着照着我控制不住情绪,我不敢再回头多看一眼那些我曾经一个个挑选进来的伙伴,那些曾经一起奋战的伙伴,因为我的眼框已经红了。等电梯,我努力的控制着自己的情绪,不停的东晃西晃,不停的抬头看天花板,电梯终于来了。下了楼,那熟悉的道路、熟悉的狗屎BRT,突然都变得那么让人伤感,站在站台上,努力压抑着自己的情绪,庆幸,我没有崩溃。我是一个情感丰富的人,但我却又 Read More
posted @ 2011-07-01 18:50 I,Robot 阅读(556) 评论(4) 推荐(0) Edit
一直以来,涉及到多表查询操作时,原有的框架都需要自定义SQL语句或视图/存储过程来解决,一直想解决掉这个问题,但一直没腾出精力来,这个问题看似不痛不痒,但放在一边又始终是个问题,心里总是有些不爽.这几天花了点时间仔细研究了一下这个问题,似乎有了点思路,于是,出来了一个Joinner类.主要解决的问题:1.表别名问题2.字段别名问题.3.实体映射信息缓存问题.4.映射信息获取的问题.问题1/3是有关联的,因为映射信息跟表别名都涉及到数据表的信息,所以最后的解决办法是将映射信息复制一个新的实例出来,这样设置别名时就不会影响到原来的表了.问题2比较简单,字段映射的类再扩展出一个别名字段映射的类加上别 Read More
posted @ 2010-08-31 13:32 I,Robot 阅读(2899) 评论(2) 推荐(0) Edit
点击右上角即可分享
微信分享提示