1. package shorurl;
    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.commons.lang.StringUtils;
    publicclassShortUrl{
    privatestaticfinalint BINARY =0x2;
    privatestaticfinalint NUMBER_61 =0x0000003d;
    staticfinalchar[] DIGITS ={'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','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'};
    protectedString shorten(String longUrl){
    String shortUrl = shorten(longUrl,5);
    if(StringUtils.isEmpty(shortUrl)){
    shortUrl = shorten(longUrl,6);
    }
    return shortUrl;
    }
    publicString shorten(String longUrl,int urlLength){
    if(urlLength <0|| urlLength >6){
    thrownewIllegalArgumentException("the length of url must be between 0 and 6");
    }
    String md5Hex =DigestUtils.md5Hex(longUrl);
    // 6 digit binary can indicate 62 letter & number from 0-9a-zA-Z
    int binaryLength = urlLength *6;
    long binaryLengthFixer =Long.valueOf(StringUtils.repeat("1", binaryLength), BINARY);
    for(int i =0; i <4; i++){
    String subString =StringUtils.substring(md5Hex, i *8,(i +1)*8);
    subString =Long.toBinaryString(Long.valueOf(subString,16)& binaryLengthFixer);
    subString =StringUtils.leftPad(subString, binaryLength,"0");
    StringBuilder sbBuilder =newStringBuilder();
    for(int j =0; j < urlLength; j++){
    String subString2 =StringUtils.substring(subString, j *6,(j +1)*6);
    int charIndex =Integer.valueOf(subString2, BINARY)& NUMBER_61;
    sbBuilder.append(DIGITS[charIndex]);
    }
    String shortUrl = sbBuilder.toString();
    return shortUrl;
    }
    returnnull;
    }
    }

      

java 短链接生成的更多相关文章

  1. Java根据链接生成二维码

    Java根据链接生成二维码 相关 jar 包: core-3.1.0.jar 源码及 jar 包下载:http://files.cnblogs.com/files/liaolongjun/qrcode ...

  2. c# 短链接生成

    public static string GetShortUrl(string url) { //可以自定义生成MD5加密字符传前的混合KEY string key = DateTime.Now.To ...

  3. Java生成短链接

    为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...

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

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

  5. 微博短链接的生成算法(Java版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...

  6. Java二维码登录流程实现(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二 ...

  7. 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成

    短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...

  8. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  9. 短网址url接口api,url短链接(t.cn、url.cn)生成

    简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...

随机推荐

  1. double int char long 等数据类型所占的字节数-----待整理

  2. tensorflow入门(三)

    三种代价函数 1,二次代价函数   式子代表预测值与样本值的差得平方和 由于使用的是梯度下降法,我们对变量w,b分别求偏导: 这种函数对于处理线性的关系比较好,但是如果遇到s型函数(如下图所示),效率 ...

  3. 安装magento主题模板

    magento 的强大功能自不必说, 另外还有一点更重要的是拥有很多顶级的精致模板开发者和爱好者的支持开发出种类繁多, 用途各异的模板, 深受用户的喜爱, 但是安装模板对于初次使用者或者很久没有使用者 ...

  4. DSOFramer原有的接口说明

    (转自:http://blog.csdn.net/hwbox/article/details/5669414) DSOFramer原有的接口说明 =========================== ...

  5. [Eclipse]Eclipse快捷键

    查看一个方法被谁调用:选中方法名字,Search-->Reference-->Workspace

  6. JQuery iframe

    子页面获取父页面的元素 function colisetapTJ() { var tapid = $('div:contains("添加档案报送"):last', window.p ...

  7. Gridview 尾部添加总计

    1.GridView控件showfooter的属性=true 2. int totalZJ, iZJ; protected void GridView1_RowDataBound(object sen ...

  8. 一月收集几个有用的谷歌Chrome插件

    谷歌Chrome自推出以来已经从一个简单的浏览器演变成一个复杂的浏览器,这得益于根据浏览器写出的非常有用和强大的扩展.作为一名开发人员,我们关注的是网页设计和开发部分的那些插件对我们有帮助,几个比较熟 ...

  9. core文件介绍

    原文链接:http://team.eyou.com/?p=27 如有侵犯您的版权,请联系windeal12@qq.com linux下,产生core文件,和不产生core文件的条件: 当我们的程序崩溃 ...

  10. 判断Git是否有新的提交

    公司要搭建CI,有这样一个需求:判断Git是否有新的提交,如果有的话拉取代码构建,如果没有不构建,Jenkins的搭建这里就不赘述了,主要讲一下判断这里. Jenkins需要安装插件Condition ...