自从twitter推出短网址(shorturl),国内也有很多互联网公司推出短网址链接,比如微博等。
下面是从网上找到了一些算法总结:

算法一:

最容易想到的算法可能是利用md5类的加密算法,然后针对加密后的字符串进行处理。

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

算法二:
a-zA-Z0-9 这64位取6位组合,可产生500多亿个组合数量。把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。
把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理 ID为2时,字符串组合为bba,依次类推,直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。

下面自己简单模拟了一个返回8位随即码的短网址算法,算法实现基于算法一。

public class ShortUrlUtil {static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'a', 'b', 'c', 'd', 'e', 'f' };public static String shortUrl(String url) throws Exception {MessageDigest messagedigest = MessageDigest.getInstance("MD5");messagedigest.update(url.getBytes());String result = bufferToHex(messagedigest.digest());String resUrl = new String("");for (int i = 0; i < 8; i++) {String tmpString = result.substring(i * 4, i * 4 + 4);long hexLong = 0x3FFFFFFF & Long.parseLong(tmpString, 16);resUrl += hexDigits[Integer.valueOf((hexLong % 16) + "")] + "";}return resUrl;}private static String bufferToHex(byte bytes[]) {return bufferToHex(bytes, 0, bytes.length);}private static String bufferToHex(byte bytes[], int m, int n) {StringBuffer stringbuffer = new StringBuffer(2 * n);int k = m + n;for (int l = m; l < k; l++) {appendHexPair(bytes[l], stringbuffer);}return stringbuffer.toString();}private static void appendHexPair(byte bt, StringBuffer stringbuffer) {char c0 = hexDigits[(bt & 0xf0) >> 4];char c1 = hexDigits[bt & 0xf];stringbuffer.append(c0);stringbuffer.append(c1);}public static void main(String[] args) {String sLongUrl = "http://weibo.com/taobaotianshui?wvr=5&wvr=5&lf=reg";String shortUrl;try {shortUrl = shortUrl(sLongUrl);System.out.println(sLongUrl + " ===> " + shortUrl);} catch (Exception e) {e.printStackTrace();}}
}

当生成短网址链接之后,只需要在表中(数据库或者类NoSql的K-V存储)存储原始链接与短链接的映射关系即可。

微博短链接生成算法与简单实现相关推荐

  1. 快速理解简单的短链接生成原理

    快速理解简单的短链接生成原理 原理 计算长链接整体为一个十进制数,将其映射成一个62进制数.这个62进制由26个小写字母,26个大写字母和10个数字表示. 假设有long-url这么一个长网址,其10 ...

  2. java 短链跳转原理_给你代码:短链接生成原理

    短链接,顾名思义就是在形式上比较短的链接.最早存在于微博(如新浪微博,t.cn,url.cn)分享网址中.比如这样的:t.cn/Aidjddvo 短链接的好处 内容需要(比如短信,微博中链接字数的限制 ...

  3. Java短链接生成解决方案

    Java短链接生成解决方案 短链接生成的思路 原理:各大网站短链接的生成思路就是建立一个数据库,里面有长链接和对应短链接的映射,当输入短链接地址时,就去数据库查询对应的长链接,找到后,跳转到长链接 我 ...

  4. t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程

    t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方 ...

  5. 独立开发变现周刊(第66期): 如何把一个短链接生成工具变成一个可持续盈利的产品?...

    分享独立开发.产品变现相关内容,每周五发布. 目录 1.Padloc: 一个开源的,端到端加密的产品. 2.Spinach: 高效完成你的每日站立会议 3.Excalidraw: 虚拟白板,用于手绘图 ...

  6. 黑色简洁的PHP短网址短链接生成源码 可在后台添加广告

    黑色简洁的PHP短网址短链接生成源码 可在后台添加广告 前端: 简洁.优雅.反应灵敏的设计 创建URL.创建自定义URL.密码保护的链接.链接统计.暗色主题.小书签.复制和共享链接 后端: 删除网址. ...

  7. 短链接生成平台哪个好用

    短链接生成平台哪个好用? 短网址,又称短链接,短链接对于推广来说更容易传播和识别,如果不想辛辛苦苦发的链接,最后全部变成红色.失效,赶紧短链接管理用起来! 如何选择一个靠谱的短链接管理服务平台,亲测各 ...

  8. 短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口

    短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口[最新版]_数据API_数据应用-云市场-阿里云 如何生成短网址,短链接? 这为我们短信节约了巨额的成本 publ ...

  9. 百度SEO简单防红短链接生成源码 支持加密 二维码

    简单防红短链接,短链接生成,短链接加密,短链接二维码,短链接API,短链接自定义后缀 二维码API,QQ内部自动替换至浏览器打开,自定义广告, 程序非常小巧,但是功能是很多的,支持自定义后缀.加密访问 ...

最新文章

  1. 二分法典例:木棒切割问题
  2. SAP WMSD集成之Copy WM Quantity
  3. Block的副本放置策略
  4. 在Exchange 2013 OWA登录页面中修改密码
  5. DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
  6. 远程桌面连接CentOS7
  7. 基于Pyspark和Thunder的神经图像数据分析-实验运行结果
  8. 新一代蓝牙对工业物联网(IIOT)的应用
  9. html表头的标签,HTML 表头单元格标签
  10. 第二十七篇 导航栏和内容块
  11. Redis的AOF持久化的实现
  12. 集合 (二) ----- Map集合详解
  13. [设计模式] 15 解释器模式 Interpreter
  14. 无人驾驶 ai算法_AI机器学习具有碳足迹,因此无人驾驶汽车也是如此
  15. 淘宝客公众号京东淘宝拼多多三合一源码三级代理系统网站源码
  16. PDF是什么格式?如何编辑PDF文件?
  17. 玛丽·娜拉(Marie Neurath)遗失的遗产
  18. 华为p4支持鸿蒙功能吗_华为鸿蒙系统支持机型介绍
  19. 电影《后悔无期》的经典段子
  20. 设计模式01-七大设计原则

热门文章

  1. 位运算常用技巧以及练习
  2. 永恒之蓝漏洞原理及利用
  3. php将unicode转换成中文乱码,php如何将unicode转换中文
  4. Django项目使用gunicorn
  5. Ubuntu下手动挂载U盘
  6. C语言中的strtol函数
  7. 你是射手座O型血吗?
  8. SpringBoot + Spock
  9. django实现,微博第三方登录超详细
  10. 广告创意设计课程 博客_博客的16个伟大的内容创意