c# 网址压缩简单实现短网址

 更新时间:2012年12月16日 10:29:35   作者:  
短网址,忽然一下子就冒出来的东西,长长的一个URL,提交过去,出来就只有短短的一个URL了,看起来似乎挺神奇,其实简单分析一下,明白其中的原理,也是一件很简单的事情,需要的朋友可以了解下
短网址,忽然一下子就冒出来的东西,长长的一个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,明白了原理后,相信您自己做一个短网址的网站也不难了吧,难的只是有一个短的域名而已了。
要是觉得对您有帮助不妨点一下推荐吧,有什么想法或建议可以留言一起讨论噢~~~

相关文章

  • C#身份证验证小例子

    C#身份证验证小例子

    C#身份证验证小例子,需要的朋友可以参考一下
    2013-04-04
  • windows下C#定时管理器框架Task.MainForm详解

    windows下C#定时管理器框架Task.MainForm详解

    这篇文章主要为大家详细介绍了windows下C#定时管理器框架Task.MainForm的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Unity3D使用陀螺仪控制节点旋转

    Unity3D使用陀螺仪控制节点旋转

    这篇文章主要为大家详细介绍了Unity3D使用陀螺仪控制节点旋转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C#中using的使用方式详解

    C#中using的使用方式详解

    这篇文章主要介绍了C#中using的使用方式方式详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • C# SQLite序列操作实现方法详解

    C# SQLite序列操作实现方法详解

    这篇文章主要介绍了C# SQLite序列操作实现方法,结合实例形式详细分析了C#实现SQLite序列操作的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • C#数字图象处理之肤色检测的方法

    C#数字图象处理之肤色检测的方法

    这篇文章主要介绍了C#数字图象处理之肤色检测的方法,可实现针对肤色的检测功能,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#泛型的逆变协变之个人理解

    C#泛型的逆变协变之个人理解

    这篇文章主要介绍了C#泛型的逆变协变之个人理解,需要的朋友可以参考下
    2023-04-04
  • Quartz.Net使用方法详解

    Quartz.Net使用方法详解

    本文详细讲解了Quartz.Net的使用方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C# WinForm程序设计简单计算器

    C# WinForm程序设计简单计算器

    这篇文章主要为大家详细介绍了C# WinForm程序设计简单计算器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • c#菜单动态合并的实现方法

    c#菜单动态合并的实现方法

    这篇文章主要介绍了c#菜单动态合并的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论