微博短链接的生成算法(Java版本)_O溺水的鱼0的博客-CSDN博客_java短链接


本站和网页 https://blog.csdn.net/wgw335363240/article/details/6568794 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

微博短链接的生成算法(Java版本)_O溺水的鱼0的博客-CSDN博客_java短链接
微博短链接的生成算法(Java版本)
O溺水的鱼0
于 2011-06-26 17:15:00 发布
27751
收藏
分类专栏:
java
文章标签:
算法
java
string
加密
nosql
url
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wgw335363240/article/details/6568794
版权
java
专栏收录该内容
53 篇文章
0 订阅
订阅专栏
微博短链接的生成算法(Java 版本)
最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。
开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链接的。后来尝试了下压缩算法(gzip 压缩算法),发现对于url 这种字符串越是压缩,长度就越长。通过对压缩算法的一些了解,发现靠压缩算法来实现这个功能不太靠谱。
后来在网上找到一个生成算法,该算法主要使用MD5 算法对原始链接进行加密(这里使用的MD5 加密后的字符串长度为32 位),然后对加密后的字符串进行处理以得到短链接的地址。原始的算法是C# 版本的,这里我把该算法修改成Java 版本的. 算法的具体代码如下,代码中有注释:
一、  代码
package com.csdn.shorturl; public class ShortUrlGenerator {       /**       * @param args       */     public static void main(String[] args) {        // 长连接: http://tech.sina.com.cn/i/2011-03-23/11285321288.shtml        // 新浪解析后的短链接为: http://t.cn/h1jGSC        String sLongUrl = "http://tech.sina.com.cn/i/2011-03-23/11285321288.shtml" ; // 3BD768E58042156E54626860E241E999        String[] aResult = shortUrl (sLongUrl);        // 打印出结果        for ( int i = 0; i < aResult. length ; i++) {            System. out .println( "[" + i + "]:::" + aResult[i]);        }     }       public static String[] shortUrl(String url) {        // 可以自定义生成 MD5 加密字符传前的混合 KEY        String key = "wuguowei" ;        // 要使用生成 URL 的字符        String[] chars = new String[] { "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" ,               "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" ,               "u" , "v" , "w" , "x" , "y" , "z" , "0" , "1" , "2" , "3" , "4" , "5" ,               "6" , "7" , "8" , "9" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" ,               "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" ,               "U" , "V" , "W" , "X" , "Y" , "Z"          };        // 对传入网址进行 MD5 加密        String sMD5EncryptResult = ( new CMyEncrypt()).getMD5OfStr(key + url);        String hex = sMD5EncryptResult;          String[] resUrl = new String[4];        for ( int i = 0; i < 4; i++) {              // 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算            String sTempSubString = hex.substring(i * 8, i * 8 + 8);              // 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 , 如果不用 long ,则会越界            long lHexLong = 0x3FFFFFFF & Long.parseLong (sTempSubString, 16);            String outChars = "" ;            for ( int j = 0; j < 6; j++) {               // 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引               long index = 0x0000003D & lHexLong;               // 把取得的字符相加               outChars += chars[( int ) index];               // 每次循环按位右移 5 位               lHexLong = lHexLong >> 5;            }            // 把字符串存入对应索引的输出数组            resUrl[i] = outChars;        }        return resUrl;     } }  
二、  输出结果
执行上面代码的结果如下,会产生4 组6 位字符串,任意一组都可以作为当前字符串的短链接地址。
[0]:::7nUFJn [1]:::f6Zzy2 [2]:::j6jmQb [3]:::2eAjea
三、  跳转原理
当我们生成短链接之后,只需要在表中(数据库或者NoSql )存储原始链接与短链接的映射关系即可。当我们访问短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。
O溺水的鱼0
关注
关注
点赞
收藏
打赏
57
评论
微博短链接的生成算法(Java版本)
800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
复制链接
扫一扫
专栏目录
java短网址服务(TinyURL)生成算法
08-27
主要为大家详细介绍了java短网址服务生成算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
长URL链接转短链接算法(JAVA)
Mr_zore的专栏
08-14
4527
最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。
开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短
评论 57
您还未登录,请先
登录
后发表或查看评论
【短链】如何生成短链(原理说明 + 如何实现一个短链服务器)
最新发布
大胡子老哥的博客
11-03
713
如何生成短链(原理说明 + 如何实现一个短链服务器),62进制转换的实现
微博java实现原理_【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)...
weixin_33040687的博客
02-13
78
最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法:再根据自己的理解,用Java实现了该...
URL短地址压缩算法 微博短地址原理解析 (Java实现)
热门推荐
10-15
2万+
最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法:再根据自己的理解,用Java实现了该
java 新浪短链接_java生成短连接(调用新浪微博api生成)
weixin_32301557的博客
02-13
210
java生成短连接主要利用新浪微博提供的api生成import java.io.IOException;import java.util.UUID;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.niusan.zmkm.ctcn.pay.tenpay.client.Ten...
最通俗易懂的短链接原理讲解
点滴记录
05-13
8694
看业务代码的时候,有些逻辑用到了短链接服务,感觉还蛮有意思的,这里简单的记录一下。
这种营销短信大家应该都收到过,短信有最大字符限制,而且为了更好的观感体验,短信里的链接一般都很短。现成的短链接生成服务也比较多,比如新浪、百度等,谷歌之前也有短链接服务,号称是最快的,但是在 2018 年关闭了。
一、短链接原理
我们点击短链接会发起一个 GET 方式的 HTTP 请求,当请求到对应的 API 后,会解析短链接里的标识获取到对应的长链接,然后重定向到长链接,这样整个流程就结束了。
比如我用新浪的短链接服务
仿新浪微博短链接生成短链接(使用62进制)
简简单单,平平淡淡
02-18
3567
说仿新浪其实算是个嚼头,吸引人们的眼球,对于常规的进制算法可以去参看数据结构一书
通过取模方式计算出对应的n进制数
Java代码
int nv = 2; //进制
int n = 4;
List ll = new ArrayList();
while (n >= 1) {
ll.add(n%nv);
System.ou
Java实现短链接URL生成
z69183787的专栏
04-19
4674
现在比较流行短连接,例如新浪微博,腾讯等等公司都开始使用短连接。
① 将长网址用md5算法生成32位签名串,分为4段,,每段8个字符;
② 对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;
③ 将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
④ 这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。
很简单的理论,我们并不一定说得
Java开发短连接分享功能
weixin_43885078的博客
09-09
965
首先先理解需求,产品的需求是要求说用户分享一条短链接,从而跳转到下载落地页,下载APP,然后被邀请者就是邀请者的下属用户。
这。。没问题,甘蔗!
微博短链接生成算法与简单实现
蜗牛架构师
04-17
3762
自从twitter推出短网址(shorturl),国内也有很多互联网公司推出短网址链接,比如微博等。
下面是从网上找到了一些算法总结:
算法一:
最容易想到的算法可能是利用md5类的加密算法,然后针对加密后的字符串进行处理。
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作,
URL短网址生成算法原理
阳光岛主
08-05
1万+
短网址(Short URL),是在形式上比较短的网址,通过映射关系跳转到原有的长网址。
本文转自米扑博客:URL短网址生成算法原理
通常用 php 或 python 转向,在Web 2.0的今天,不得不说,这是一个潮流。
自从twitter推出短网址(short url),继之国内各大微博跟风,google公开goo.gl使用API,短网址之风愈演愈烈。不得不说这是一个新兴又一大热门web2...
新浪短连接(t.cn)在线生成工具
admirn的博客
08-13
7675
介绍:
首先介绍下短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。
早期短链接广泛应用于图片上传网站,通过缩短网址URL链接字数,达到减少代码字符串的目的。更便于使用者引用网址,写入代码中。节省字符数空间。常见于网店图片分类的使用,因有字符限制,运用短链接,达到外链图片的目的,自微博盛行以来,在微博字数有限的特色下,短链接也盛行于微博网站,以节省字数,给博主发布更多文字的空间。
这里给大家介绍一个在线生成短链接的地址,随时可能失效,大家且用且珍惜
截图:
用法:
直接.
网上各种短网址算法应用的初步详细汇总
java-t-go
08-12
166
看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想到的就是原来公司写的一个游戏激活码规则,也就是下面的算法2,26个大写字母 26小写字母,10个数字,随机生成6个然后插入数据库对应一个id,短连接跳转的时候,根据字符串查询到对应id,即可实现相应的跳转!不过2的62次方,不知道有没有重复的,小概率可以,但是对应不是很大的网站应该足够了
自从twitter推出短网址...
java短链接生成方法
九丶弟
01-07
3478
这里列出两种短链接生成的方法供有需要的朋友参考。
方法一
这种方法的的缺点很明显。
1. 缺点一
必须指定短链接的长度(for循环的次数即是短链的长度)。一旦设置,如果占用满,将需要更改代码重新发布。不利于维护
2. 缺点二
会发现这个代码只是生成key,与本身要生成的链接没有任何关系,所以需要手动记录key与value的对应关系。比如记录到redis中。(其实个人并并不认为这是个缺点,短链接...
短链接算法原理
稻草人技术博客
03-09
877
平时我们在上网的时候,印象最深刻的有一次是短链接的服务。例如:平时在微信上看一个网页的时候,如果我们选择在浏览器打开的时候,会看到很长的URL,我们分享的时候,会看到一个很短URL,这就是本次所说的短链接的应用之一。
长链接示例:https://mp.weixin.qq.com/s?__biz=MzAxNzMwOTQ0NA==&mid=2653355437&idx=1&sn...
URL短地址压缩算法-短网址映射
it_man的专栏
05-25
2万+
微博短地址原理解析 (Java实现)
一种方法是调用第三方提供短址服务的接口来生成即可。一般他们提供接口或调用包。
如:
怎样调用百度短网址api? http://www.baidu.com/search/dwz.html (无需授权即可调用)
新浪短网址API接口(3月15日更新)
新浪更新后的长网址转短网址官方API文档:http://ope
URL短地址压缩算法 微博短地址原理解析(再转与Java实现)
xiaoyao3857的专栏
09-01
6713
主要是一次发新浪微博,发网址时看到网址被压缩了,才对这个有兴趣,于是查了查,查到这些
URL短地址压缩算法 微博短地址原理解析
和其Java实现的博文
URL短地址压缩算法 微博短地址原理解析 (Java实现)
对第一篇博文,留了疑问,主要是觉得于四个得到的压缩地址中取一个,那之前循环计算不是有些浪费计算能力吗?
不多说废话,这里就贴下自己的Java验证实现代码:
import
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:创作都市
设计师:CSDN官方博客
返回首页
O溺水的鱼0
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
213
原创
5万+
周排名
90万+
总排名
191万+
访问
等级
1万+
积分
348
粉丝
240
获赞
262
评论
243
收藏
私信
关注
热门文章
java枚举类型enum的使用
202286
Java连接redis的使用示例
76259
Java命令行编译源码.java文件
71356
CSS的width:100%和width:auto区别
50797
Eclipse中设置JVM内存
48515
分类专栏
面试专栏
1篇
Apache相关
12篇
C#
11篇
css
3篇
eclipse
7篇
hibernate
2篇
HTML
9篇
java
53篇
JavaScript·
8篇
linux
13篇
MySql
14篇
oracle
11篇
sql server
10篇
Tomcat相关
6篇
Websphere
3篇
其他
4篇
oracle 主键 唯一 约束
1篇
Maven
4篇
Spring
6篇
算法
3篇
windows
1篇
Sybase
8篇
TDS
1篇
Invalid
1篇
packet
1篇
线程
6篇
Ant
2篇
swf
1篇
Office
ActiveX
2篇
C++
4篇
工具类
7篇
读后感
4篇
书籍
5篇
网站分析
1篇
php相关
18篇
python
13篇
redis
3篇
应用服务器
4篇
同一人让
好几个很烦放到
该辅导班飞
区块链
1篇
email
1篇
apache
1篇
运维
1篇
代码检测
1篇
最新评论
ORACLE: 查询(看)表的主键、外键、唯一性约束和索引
BadGalDesperado:
似乎没有用啊,我一个表有主键、有外键约束,执行上面的语句结果是no rows selected
java枚举类型enum的使用
qq_46653265:
非常对
RunTime.getRunTime().addShutdownHook用法
m0_51280536:
缓存写入磁盘
java枚举类型enum的使用
沨沙:
前面还能看懂,后面的4-11就看不懂了
Python编写的客户端给服务器发送指令执行相应的命令并返回结果
烟雨yy:
你这个脚本有问题
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
jdk的java.util.Base64编码 与 android.util.Base64 的区别
Reids经典问题汇总
AOP底层技术CGLIB示例
2021年2篇
2020年1篇
2019年2篇
2018年3篇
2016年10篇
2015年10篇
2014年55篇
2013年27篇
2012年34篇
2011年44篇
2010年37篇
目录
目录
分类专栏
面试专栏
1篇
Apache相关
12篇
C#
11篇
css
3篇
eclipse
7篇
hibernate
2篇
HTML
9篇
java
53篇
JavaScript·
8篇
linux
13篇
MySql
14篇
oracle
11篇
sql server
10篇
Tomcat相关
6篇
Websphere
3篇
其他
4篇
oracle 主键 唯一 约束
1篇
Maven
4篇
Spring
6篇
算法
3篇
windows
1篇
Sybase
8篇
TDS
1篇
Invalid
1篇
packet
1篇
线程
6篇
Ant
2篇
swf
1篇
Office
ActiveX
2篇
C++
4篇
工具类
7篇
读后感
4篇
书籍
5篇
网站分析
1篇
php相关
18篇
python
13篇
redis
3篇
应用服务器
4篇
同一人让
好几个很烦放到
该辅导班飞
区块链
1篇
email
1篇
apache
1篇
运维
1篇
代码检测
1篇
目录
评论 57
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
O溺水的鱼0
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值