基础知识---微博中,短链接的生成方法

转载 2015年07月07日 14:57:03

 短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。

例如:http://t.cn/SzjPjA  表示http://hi.baidu.com/cubeking/

  短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场。估计很多朋友现在也正在使用。 

       看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想到的就是原来公司写的一个游戏激活码规则,也就是下面的算法2,

26个大写字母 26小写字母,10个数字,随机生成6个然后插入数据库对应一个id,短连接跳转的时候,根据字符串查询到对应id,即可实现相应的跳转!不过2的62次方,不知道有没有重复的,小概率可以,但是对应不是很大的网站应该足够了

自从twitter推出短网址(shorturl),继之国内各大微博跟风,google公开goo.gl使用API,短网址之风愈演愈烈.不得不说这是一个新兴又一大热门web2.0服务.现整理一下,包括完整短网址网站,短网址生成原理,算法举例,以及优劣比较,同时还介绍几个phper个人实现的.

算法原理
算法一
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;

这种算法,虽然会生成4个,但是仍然存在重复几率,下面的算法一和三,就是这种的实现.

算法二
a-zA-Z0-9 这64位取6位组合,可产生500多亿个组合数量.把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。
把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理 ID为2时,字符串组合为bba,依次类推,直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。
具体参看这里彻底完善新浪微博接口和超短URL算法,算法四可以算作是此算法的一种实现,此算法一般不会重复,但是如果是统计的话,就有很大问题,特别是对域名相关的统计,就抓瞎了.

简单生成短网址方法

<?php

02 function base62($x)
03 {
04     $show= '';
05     while($x> 0) {
06         $s= $x% 62;
07         if($s> 35) {
08             $s= chr($s+61);            
09         } elseif($s> 9 && $s<=35) {
10             $s= chr($s+ 55);
11         }
12         $show.= $s;
13         $x= floor($x/62);
14     }
15     return $show;    
16 }
17   
18 function urlShort($url)
19 {
20     $url= crc32($url);
21     $result= sprintf("%u", $url);
22     return base62($result);
23 }
24   
25 echo urlShort("http://hi.baidu.com/cubeking/");
?>





微博短网址生成算法原理 by cubeking

短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代...
  • zzxian
  • zzxian
  • 2013年04月26日 18:48
  • 1293

新浪微博生成超短链接

要生成超短链接,先看下新浪官方给出的说明: 简介:短网址生成器是一个非常简单的让你在线生成新浪微博短网址的服务。使用她可以让你在140字的微博中发表更多的文字内容。 1、新浪微博短网址生成器...
  • BuquTianya
  • BuquTianya
  • 2015年10月09日 09:44
  • 3279

微博URL(短超链接)的生成原理

新浪、腾讯、搜狐等微博网站都加入了短超链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成...
  • avenccssddnn
  • avenccssddnn
  • 2013年04月14日 21:06
  • 3018

仿新浪微博短链接生成短链接(使用62进制)

说仿新浪其实算是个嚼头,吸引人们的眼球,对于常规的进制算法可以去参看数据结构一书  通过取模方式计算出对应的n进制数  Java代码   int nv = 2; //进制  ...
  • sxhong
  • sxhong
  • 2014年02月18日 09:47
  • 1895

新浪微博短链接口与研究

转载地址 http://rozbo.blog.51cto.com/2201536/1284729 上一篇博文中我们讲到了百度短网址接口,那么这篇文章中我们着重讲述的是新浪短链的接口。 相比...
  • ywch2010
  • ywch2010
  • 2014年01月22日 09:22
  • 1242

javascript生成新浪微博短链接

生成长链接和端链接 长链接: 短链接: 生成
  • lifa1
  • lifa1
  • 2014年11月24日 12:02
  • 2488

java生成短连接(调用新浪微博api生成)

java生成短连接
  • suochunlong
  • suochunlong
  • 2016年11月04日 13:34
  • 2762

java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java

仿新浪微博 短链接地址生成工具 ShortUrlGenerator.java 源代码下载地址:http://www.zuidaima.com/share/1550463378934784.htm...
  • springmvc_springdata
  • springmvc_springdata
  • 2014年09月09日 09:25
  • 5490

java调用新浪长连接转短链接api--新浪微博Oauth2.0授权 获取Access Token

最近接触到了新浪长连接转短链接api调用,之前公司直接让用户跳转到新浪页面自己生成,然后复制了页面跳回来再用,用户体验不好,现在做修改。 新浪Oauth2.0授权 获取Access Token 新浪开...
  • Kindle_code
  • Kindle_code
  • 2017年08月11日 15:19
  • 687

用PHP实现微博里面短链接的算法

思路:   1)将长网址md5生成32位签名串,分为4段, 每段8个字节;   2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽...
  • Delete_V
  • Delete_V
  • 2013年11月24日 20:04
  • 794
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基础知识---微博中,短链接的生成方法
举报原因:
原因补充:

(最多只允许输入30个字)