开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链接的。后来尝试了下压缩算法(gzip 压缩算法),发现对于url 这种字符串越是压缩,长度就越长。通过对压缩算法的一些了解,发现靠压缩算法来实现这个功能不太靠谱。

后来在网上找到一个生成算法,该算法主要使用MD5 算法对原始链接进行加密(这里使用的MD5 加密后的字符串长度为32 位),然后对加密后的字符串进行处理以得到短链接的地址。原始的算法是C 版本的,这里我把该算法修改成Java 版本的. 算法的具体代码如下,代码中有注释:

import org.apache.commons.codec.digest.DigestUtils;  public class ShortUrl {  public static void main(String[] args) {  // 长连接  String longUrl = "http://data.13322.com/basket/team/27_0_1.html";  // 转换成的短链接后6位码  String[] shortCodeArray = shortUrl(longUrl);  for (int i = 0; i < shortCodeArray.length; i++) {  System.out.println(shortCodeArray[i]);// 任意一个都可以作为短链接码  }  }  public static String[] shortUrl(String url) {  // 可以自定义生成 MD5 加密字符传前的混合 KEY  String key = "";  // 要使用生成 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 = DigestUtils.md5Hex(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 位字符串,任意一组都可以作为当前字符串的短链接地址。

三、 跳转原理

当我们生成短链接之后,只需要在表中(数据库或者NoSql )存储原始链接与短链接的映射关系即可。当我们访问短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。

URL长链接转短链接相关推荐

  1. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

  2. 长URL链接转短链接算法

    引言 很多大型网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就是把原始链接很长的地址压缩成只有6 个 ...

  3. 微信URL Scheme码+长链接转短链接+短链接通过h5页面跳转到微信小程序

    微信URL Scheme码+长链接转短链接+短链接通过h5页面跳转到微信小程序 --生成微信URL Scheme码-->长链接转换成短链接-->通过短信进行推广-->用户访问营销短信 ...

  4. php微信短网址生成,微信公众号实现长链接转短链接!w.url.cn短网址生成

    微信公众号开发者平台提供短网址生成的API,最终生成的短网址是w.url.cn的,下面是详细的代码. 官方文档 https://developers.weixin.qq.com/doc/offiacc ...

  5. 【短链接】——新浪、百度、搜狐等官方长链接转短链接

    在项目中难免会生成自己的跳转链接,为了简化链接以及防止微信等屏蔽,可以用一些官方的api将自己的链接转为短链接. ConvertShortUrlUtil.java public class Conve ...

  6. C#长链接转短链接(调用新浪api)

     /// <summary>  /// 长链接转短链接  /// </summary>  /// <param name="longUrl"> ...

  7. 长链接转短链接java_新浪短网址API接口 - 长链接转短链接

    新浪短网址API接口是新浪对外公开的短网址生成接口,可以将长链接转短链接(生成的是 http://t.cn/xxxx 格式的),分享一个自己收藏的api接口,使用快一年了,一直都挺稳定的,觉得不错可以 ...

  8. Java把长链接变成短链接_借助第三方,java长链接转短链接,IP域名同样支持

    短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成短链接地址,当点击这个链接后,又可以跳转到原始链接地址. package common.util; import java.uti ...

  9. springboot实现长链接转短链接

    自己编写长链接转短链接 原理:将长链接在后台通过转换的方式转成所需的短链接(域名+(项目名)+唯一标识) 长链接转成短链接 /*** 短链接工具类*/ @Component public class ...

最新文章

  1. 编译安装PHP 时遇到问题解决方法.
  2. 小白如何学习大数据开发,大数据学习路线是怎样的?
  3. my sql Group_concat函数
  4. 惠普服务器bios查看硬件属性,查看硬件信息
  5. 题目: javaweb前端素材管理系统(附免费下载源码链接)
  6. setSignVisible的修改
  7. Java接口的防御性API演进
  8. centOS 6 rpm安装MySQL小记
  9. Camera 图像处理原理分析
  10. 【软件测试】《软件测试技术基础》知识点整理
  11. 用友U8软件功能集合
  12. linux下安装字体
  13. 罗永浩写给俞敏洪的信
  14. 台积电工厂突发停电:或损失2亿元
  15. 计算机网络故障的排除,网络故障怎么排除 网络故障排除方法
  16. 戈革:独一无二的学者
  17. 盘数几则热门微信好友诈骗套路
  18. 原生Poi导出Excel
  19. 在Linux打包成jar
  20. linux安装chrome浏览器

热门文章

  1. css3拆解正方体动画效果
  2. php 米转换km,米 转换
  3. 有哪些问卷调查工具推荐?
  4. 灰狼算法 c语言 代码,基于灰狼优化的模糊C—均值聚类算法
  5. matlab结果以向量形式输出,MATLAB:为什么我自己写的这个函数,即使输入值为一个向量,输出也只有一个值?...
  6. 流程管理绩效考核之业务评分与评分统计分析方法
  7. java 停车收费_java 编程,停车收费简易系统
  8. vue3+ts百度编辑器
  9. PTA c#PTA第三章练习答案【程序设计基础】
  10. 阅读React官方文档