短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn、新郎的t.cn等。我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://t.cn/hrYnr0。为什么要这样做的,原因我想有这样几点:

1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。

2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。

3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。

因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料):

1)、将长网址用md5算法生成32位签名串,分为4段,每段8个字符;

2)、对这4段循环处理,取每段的8个字符,将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;

3)、将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;

4)、这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。

很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。

首先,请大家了解在Java中如何用MD5来加密字符串得到32位的加密后的字符串,下面是已经封装好的Java MD5算法:

public class MD5EncodeUtil {private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };public static String byteArrayToHexString(byte[] b) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0)n = 256 + n;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}public static String MD5Encode(String origin) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");resultString.trim();resultString = byteArrayToHexString(md.digest(resultString.getBytes("UTF-8")));} catch (Exception ex) {ex.printStackTrace();}return resultString;}public static void main(String[] args) {String data = "189022881112011111118:09sz0000123456789987654321";System.out.println(MD5Encode(data));}}

下面是获得短地址的封装方法:

public class ShortUrlUtil {public static void main(String[] args) {String url = "http://www.sunchis.com";for (String string : ShortText(url)) {System.out.println(string);}}public static String[] ShortText(String string) {String key = "XuLiang"; // 自定义生成MD5加密字符串前的混合KEYString[] chars = new String[] { // 要使用生成URL的字符"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" };String hex = MD5EncodeUtil.MD5Encode(key + string);System.out.println(hex);int hexLen = hex.length();int subHexLen = hexLen / 8;String[] ShortStr = new String[4];for (int i = 0; i < subHexLen; i++) {String outChars = "";int j = i + 1;String subHex = hex.substring(i * 8, j * 8);long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);for (int k = 0; k < 6; k++) {int index = (int) (Long.valueOf("0000003D", 16) & idx);outChars += chars[index];idx = idx >> 5;}ShortStr[i] = outChars;}return ShortStr;}}

下面来看看程序部分:现在可以直接使用ShortText(url)方法,可以等到下面四组值:

ShortText("http://www.sunchis.com")[0];  //得到值:Jzyqma
ShortText("http://www.sunchis.com")[1];  //得到值:QBrMzm
ShortText("http://www.sunchis.com")[2];  //得到值:bQreM3
ShortText("http://www.sunchis.com")[3];  //得到值:VNBRna

选取结果中四个值的任何一个值即可作为URL对应生成的短网址了。

Java学习 - URL短地址压缩算法相关推荐

  1. 微博java实现原理_【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)...

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

  2. 算法:URL短地址压缩算法-短网址映射。

    第三方 一种方法是调用第三方提供短址服务的接口来生成即可.一般他们提供接口或调用包. 百度短网址API 怎样调用百度短网址api?  http://www.baidu.com/search/dwz.h ...

  3. java url压缩_URL短地址压缩算法 微博短地址原理解析 (Java实现)

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

  4. 微博URL短地址lua生成算法

    短地址(Short URL),或 叫短网址.短链接等等 ,就是比较短的URL地址. 借助短地址,可以将原来冗长的网址替换成简短的网址,让使用者可以更容易分享链接. 在Web 2.0的今天,不得不说,这 ...

  5. java ftp获取文件名的方法_小猿圈Java学习-URL地址的组成格式

    URL的全称是Uniform Resource Locator,意思是统一资源定位符,俗称网络地址或网址.网络上的每个文件及接口,都有对应的URL网址,它规定了其他设备如何通过一系列的路径找到自己,犹 ...

  6. java 短地址_URL短地址压缩算法 微博短地址原理解析(再转与Java实现) | 学步园

    主要是一次发新浪微博,发网址时看到网址被压缩了,才对这个有兴趣,于是查了查,查到这些 和其Java实现的博文 对第一篇博文,留了疑问,主要是觉得于四个得到的压缩地址中取一个,那之前循环计算不是有些浪费 ...

  7. URL短链接压缩算法 微博短链接原理解析

    短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaurl.cn,六度短网址6du.in等. 我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如: ...

  8. Java学习笔记——Email地址验证

    案例分析: 输入一个Email地址,然后使用正则表达式验证该Email地址是否正确. 代码如下 package demo;public class JavaAPIDemo {public static ...

  9. C#短网址压缩算法与短网址原理入门

    C#如何实现url短地址? c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映 ...

最新文章

  1. 奖学金申请 | 2019年清华-青岛数据科学研究院​“RONG”奖学金申请通知
  2. Java网络编程实例---------------------------------基本HTTP客户端及服务端多线程
  3. 洛谷P2280 [HNOI2003]激光炸弹
  4. 数据结构与算法 / 编辑器和编译器如何判定括号是否合法
  5. 【Qt】QModbusTcpServer类
  6. 不能bostype没有元数据异常_EAS BOS 开发问题集锦
  7. 微软成Eclipse基金会战略伙伴
  8. Android 8 AudioPolicy 分析
  9. 1022. Genealogical Tree(topo)
  10. 在一起计时器_拥有计时器的四个怪兽,一个从杰克身上拿的,一个差点打死赛罗...
  11. 记录片《货币》- 有价星球笔记
  12. 操作系统课设详细解答
  13. android 开机设置向导
  14. win10自带输入法突然变成了繁体,輸入法怎麼成繁體了?
  15. 需不需要上线MES系统,你在纠结什么?
  16. MATLAB演示元胞自动机算法
  17. Unity学习 — 23种设计模式
  18. 刘长炯老师的java 学习大草原
  19. 1.16 利用Multisim 研究图P1.4所示电路在R的阻值变化时二极管的直流电压和交流电流的变化,并总结仿真结果。
  20. python:实现roman numerals罗马数字算法(附完整源码)

热门文章

  1. [DSP]DSP初学者指南
  2. CELLS方式引用单元格
  3. 为什么说创意是一部宣传片的灵魂
  4. CAD中如何将默认保存格式为dxf格式?
  5. STM32芯片型号的命名解读
  6. 车牌识别,多场景化应用提高通行效率
  7. vite兼容IE、低版本浏览器方法
  8. android svg点击,尝试使用 Android SVG
  9. C++ 46.基于多态的职工管理系统(2)——创建职工类(创建职工抽象类、创建普通员工类、创建经理类、创建老板类)
  10. opencv实战,钢板焊接点寻找1