`

Java版短网址(ShortUrl)的算法

阅读更多

最近,我的项目中需要用到短网址(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 short URL

    Java短链接(Short URL)是一种将长网址转化为简短易记的字符串的技术,常用于社交媒体、营销推广等领域。在这个场景中,"java short URL" 指的是使用Java编程语言实现的短链接服务。描述中提到的“可逆算法”是指在...

    Java实现短链转换项目

    在IT行业中,短链接服务是一种常见的功能,它能够将冗长的URL转化为简短的、易于分享和记忆的链接。本项目是基于Java技术栈,利用SpringBoot框架、Redis缓存系统、MySQL数据库以及布隆过滤器来实现短链转换。下面...

    java短链接生成.zip

    这个名为"java短链接生成.zip"的压缩包文件提供了一个基于SpringBoot框架的Java实现,用于生成短链接。让我们深入探讨一下这个项目的核心知识点,以及如何利用它来创建和管理短链接。 首先,我们要了解SpringBoot。...

    最新PHP短网址生成系统源码短链接生成系统源码URL缩短器系统源码.txt

    - **字段说明**:常见的字段包括`id`(自增长主键)、`long_url`(原始长网址)、`short_code`(短网址的编码部分)、`create_time`(创建时间)等。 2. **算法设计**: - **编码方式**:常用的编码方式有基数转换法和...

    shorturl:基于REST的API创建短网址。 使用Spring Framework和Spring Boot用Java开发

    - 定义一个`Url`实体类,包含`id`、`longUrl`(原始长网址)、`shortCode`(短码)等字段,用于存储短网址与长网址的映射。 3. **数据库交互(Data Access)**: - 使用Spring Data JPA进行数据操作,提供`...

    short-url:提供长链接转短网址功能

    总结来说,"short-url"项目是一个基于Java实现的短网址服务,它涉及到了URL处理、哈希映射、数据库操作、分布式服务、API设计等多个IT领域的知识点。通过研究这个项目,不仅可以掌握短网址服务的实现,还能加深对...

    短地址服务自建Linux/Win

    2. 部署服务:下载压缩包中的`shorturl.exe`或`shorturl`文件,这是一个预编译的短地址服务程序。在Linux环境下,你可以使用`nohup`或`screen`命令后台运行服务;在Windows环境下,双击执行文件即可启动服务。 3. ...

    shorturl:缩短网址

    (临时的) &gt; 解决问题的策略短URL密钥生成算法考虑哈希网址或使用uuid 在问题要求中,键是8个字符内的字符串。 当以base64编码时,64 ^ 8 = 2 ^ 48,即,结果必须在最多48位内表示,以确保非冗余密钥。 因此,判断...

    长网址在线缩短.zip

    数据库表至少包含两列:`long_url`(长网址)和`short_url`(短网址)。在生成短网址时,可以使用自增ID或其他唯一标识符进行哈希运算,得到一个较短的字符串。 #### 2. URL编码与解码 在处理URL时,必须遵循URL编码...

    short-link.rar

    本项目名为"short-link.rar",其中涉及到的主要技术包括Java编程、MD5哈希算法以及62进制编码,这些都是实现短链接转换的关键组成部分。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它可以...

    SaaS短链接系统,承载高并发和海量存储等场景难题 专为实习、校招以及社招而出的最新项目

    短链接(Short Link)是指将一个原始的长 URL(Uniform Resource Locator)通过特定的算法或服务转化为一个更短、易于记忆的 URL。短链接通常只包含几个字符,而原始的长 URL 可能会非常长。短链接的原理非常简单,...

    shortuuid:基于JDK UUID的shortuuid生成器

    这种短UUID通常比标准UUID短得多,更适合在URL、数据库键或者文件名等场景中使用。 使用shortuuid库非常简单。首先,你需要在项目中引入该库。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml ...

    学习笔记java _day02

    - **短整型(short)**: 16位整数,范围从-32,768到32,767。 - **整型(int)**: 32位整数,范围从-2^31到2^31-1。 - **长整型(long)**: 64位整数,范围从-2^63到2^63-1。 - **浮点型(float)**: 32位单精度浮点数。 - **...

    short-url

    在IT行业中,"short-url"通常指的是短链接服务,它是一种将长网址转换为较短、易记的网址的技术。这种服务广泛应用于社交媒体、营销活动和数据分析,因为它们提供了更方便的分享方式,并且可以跟踪点击率。在这个...

    short-uri

    在IT行业中,短链接服务(Short-URI)是一种常见的网络技术,它主要用于将长的URL转换为较短的形式,方便用户记忆和分享。在给定的"short-uri"项目中,我们可以推测这是一个用Java实现的短链接生成系统。下面,我们...

    网址缩短

    使用Java的Spring Boot框架,可以轻松地创建HTTP端点,如`POST /shorten`用于缩短URL,`GET /{shortCode}`用于访问短码并重定向。 7. **安全性考虑**:为了避免恶意用户滥用服务,可能需要添加限流策略,如使用滑动...

    java经典面试题2

    - **短整型变量赋值**:当尝试给短整型变量赋一个超出其范围的值时,需要进行类型转换。例如,`short s1 = 1; s1 += 1L;`,这里会报错,因为右侧的结果是`long`类型,需要显式转换为`short`类型。 - **正确的赋值...

    url-shortening-service

    【描述】:URL缩短服务的核心功能是通过哈希算法或自增ID映射,将原始长URL映射为短码,然后当用户访问这个短码时,服务会将他们重定向到原始的长URL。服务通常还包括统计点击次数、提供自定义短码等功能。 【知识...

    招银云创面试题.docx

    - Java的原始数据类型包括:布尔boolean、字节byte、短整型short、整型int、长整型long、字符char、单精度浮点float和双精度浮点double。 8. **同步关键字**: - B选项`synchronized`关键字用于对对象加互斥锁,...

    shortnr:使用 Spring Boot + Redis 构建的简单 url 缩短器服务

    - `GET /short/{shortCode}`: 通过短码获取长 URL,并进行重定向。 **5. 响应式编程** Spring Boot 2.0 引入了对响应式编程的支持,它使用 Project Reactor 作为基础库。响应式编程允许在非阻塞模型下处理 I/O 操作...

Global site tag (gtag.js) - Google Analytics