- 浏览: 153140 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (130)
- Database (5)
- JavaSE (23)
- JavaScript (11)
- Struts2 (15)
- Hibernate (11)
- Spring (16)
- Linux (4)
- Jquery (3)
- Tools (12)
- Jsp (7)
- 杂谈 (9)
- WEB Project (10)
- WebService (16)
- maven (2)
- android (1)
- memcache (2)
- 网络通信 (4)
- solr (1)
- cxf (7)
- powerdesigner (1)
- jxls (1)
- springmvc (1)
- nosql (1)
- node.js (0)
- thrift (0)
- REST (1)
- tag (1)
最新评论
最近,我的项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有 找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算 法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法:
http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/
再根据自己的理解,用Java实现了该短网址(ShortUrl)的算法。(\(^o^)/YES!我还真厉害!)
先来废话一下,是在别人的帖子上看到的,主要是让大家了解一下短网址(ShortUrl)。
时下,短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的t.cn等。
我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://t.cn/hrYnr0。为什么要这样做的,原因我想有这样几点:
1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料):
① 将长网址用md5算法生成32位签名串,分为4段,,每段8个字符;
② 对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;
③ 将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
④ 这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。
很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。
首先,请大家了解在Java中如何用MD5来加密字符串得到32位的加密后的字符串,下面这个链接就是我已经封装好的Java MD5算法:
http://www.sunchis.com/html/java/javaweb/2011/0418/308.html
下面来看看程序部分:
// 获得短uuid 6位
public static String getShortUUID() {
String uuid = UUID.randomUUID().toString();
String[] chars = new String[] { // 要使用生成URL的字符
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "m", "n",
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"2", "3", "4", "5", "6", "7", "8", "9" };
String hex = Md5.getMD5(uuid);//32位 分成4段 随机抽出其中的一段做算法
System.out.println(hex);
String ShortStr = "";
int i = random.nextInt(4);
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("0000001f", 16) & idx);//这里的"000001f"不能大于数组chars的长度,并且让其二进制格式从左到右尽可能多的为1,取值一般为35,61,63
outChars += chars[index];
idx = idx >> 5;
}
ShortStr = outChars;
return ShortStr;
}
发表评论
-
Java编程中“为了性能”尽量要做到的一些地方
2012-07-04 14:44 6221.慎用synchronized,尽量减小synchroniz ... -
利用Session防止表单重复提交
2011-12-13 18:36 11461 由于服务器缓慢或者 ... -
java format(MessageFormat)
2011-12-06 17:20 738java.text.Format |__java. ... -
java 主线程等待子线程执行完成后再执行
2011-12-06 09:47 3151原文:http://www.jiacheo.org/blog ... -
Ognl/MVEL/Aviator/JSEL 四种表达式引擎执行效率对比
2011-11-24 10:33 2935http://jindw.iteye.com/blog/732 ... -
java模拟javascript的encodeURI方法
2011-10-27 15:52 2891import java.io.UnsupportedEncod ... -
3种下载文件程序的思考,为何使用NIO进行异步网络通讯
2011-10-08 14:37 653原文链接:http://suhuanzheng7784877 ... -
cglib 动态代理
2011-08-12 10:35 711cglib is a powerful, high perfo ... -
【温故而知新】log4j输出多个自定义日志文件,动态配置路径
2011-08-10 15:38 8361. log4j输出多个自定义日志文件 log ... -
java7 新特性
2011-08-10 10:48 691原文链接:http://www.iteye ... -
设计模式学习——适配器模式
2011-06-07 10:30 726某个类拥有我们所 ... -
用spring做一个javaMail功能的例子
2011-05-16 09:37 1191前言:项目中要做一个发送邮件的功能,在网上搜了一些代码,说的都 ... -
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
2010-10-14 18:38 835今天看到一篇好文,觉得还不错,褪去的记忆被唤醒:http:/ ... -
动态代理
2010-07-13 11:11 704http://www.iteye.com/topic/7103 ... -
ASCLL,Unicode 和 UTF-8
2010-05-15 13:36 14371.Ascll 算是比较早的编码,七位二进制数表示,当然在 ... -
String 详解
2010-05-12 10:29 762解析Java中的String对象的数据类型 1. 首先S ... -
判断数据的类型
2010-05-04 15:24 791// 字符类型 String if (pramets.get( ... -
关于ThreadLocal模式的体会
2010-03-18 11:00 1176本文转至::http://www.iteye.com/topi ... -
javaClassLoader类加载器详解<转>
2010-03-12 14:43 1016由于一个JDBC的基本封装 ... -
properties 文件 读写
2010-03-10 10:18 897import java.io.BufferedInputStr ...
相关推荐
短网址工具 ShortURL 缩短地址 01010101100101010101
shorturl - 短链接生成算法
java short URL,之前一直想找一个可逆的算法,现在才发现因为算法中需要使用MD5,所根本没法可逆,希望这个资源可以帮到大家
short-url,一个很简单的小程序,用来生成url的短链接(go写的)
本文实例讲述了Python实现短网址ShortUrl的Hash运算方法。分享给大家供大家参考。具体如下: shorturl实现常见的做法都是将原始Url存储到数据库,由数据库返回一个对应ID。 以下要实现的是不用数据库支持就对原始URL...
ShortURL 是一个能缩短网址,并生成二维码的网站。http://3sd.me/APILong -> ShortURL: http://3sd.me/j/shorten Method: POST Parameters: url Return: JSONExamples:$ curl 3sd.me/j/shorten -d "url=...
shorturl 短域名 源码 欢迎下载。
微信小程序短网址转化小程序shorturl-wechat-master.zip
ShortUrl短连接程序 非常简单 有ThinkPHP开发 ShortUrl短连接程序 非常简单 有ThinkPHP开发
基于PHP的短网址 urlShort.zip
基于PHP的短网址urlShort源码.zip
另一个是long url转short url的缓存,减少一个长网址可能对应多个短网址所造成的空间浪费 接口 提供long url转short url的api接口: url: http://u.liuin.cn method: POST param: url: string required # 需要转换...
PHP实例开发源码—短网址 urlShort.zip
前言 短网址服务,可能很多朋友都已经不再陌生,现在大部分...class ShortUrl { //字符表 public static $charset = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz; public static function enco
短链接生成
urlShort是一个类似于TinyURL,可以提供短网址服务的系统。urlShort基于PHP与MySQL开发,支持mod_rewrite,提供自定义短网址名称和API来创建短网址。
这是一个轻量级PHP短网址服务,使用了PHP,Mysql,JavaScript,HTML和Css。 This is a lightweight PHP short URL service that uses PHP, Mysql, JavaScript, HTML and Css. 您需要做的: What you need to do: 前往...
shortURL 短网址生成器