`

Java生成短链接

阅读更多

java版短链接算法

生成思路:

1.将"原始链接(长链接)+key(自定义字符串,防止算法泄漏)"MD5加密

2.把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算,把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引,把取得的字符相加,每次循环按位右移 5 位,把字符串存入对应索引的输出数组(4组6位字符串)

3.生成4以下的随机数,从输入数组中取出随机数对应位置的字符串,作为短链,存入数据库或者NoSql

解析方式

编写一个web处理程序,把从ur(如:http://url.51bi.com/zAnuAn)中解析短链接,将解析到的短链接(zAnuAn)与数据库中存入的原始链接进行匹配,跳转到匹配到的原始链接

package com.bjdata.test;

import java.security.MessageDigest;
import java.util.Random;


public class ShortUrlTest {
    public static void main(String[] args) {
        String sLongUrl = "http://www.51bi.com/bbs/_t_278433840/"; // 原始链接
        System.out.println("长链接:"+sLongUrl);
        String[] aResult = shortUrl(sLongUrl);//将产生4组6位字符串
        // 打印出结果
        for (int i = 0; i < aResult.length; i++) {
            System.out.println("[" + i + "]:" + aResult[i]);
        }
        Random random=new Random();
        int j=random.nextInt(4);//产成4以内随机数
        System.out.println("短链接:"+aResult[j]);//随机取一个作为短链
    }

    public static String[] shortUrl(String url) {
        // 可以自定义生成 MD5 加密字符传前的混合 KEY
        String key = "test";
        // 要使用生成 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 hex = md5ByHex(key + url);

        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;
    }
    /**
     * MD5加密(32位大写)    
     * @param src
     * @return
     */
    public static String md5ByHex(String src) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] b = src.getBytes();
            md.reset();
            md.update(b);
            byte[] hash = md.digest();
            String hs = "";
            String stmp = "";
            for (int i = 0; i < hash.length; i++) {
                stmp = Integer.toHexString(hash[i] & 0xFF);
                if (stmp.length() == 1)
                    hs = hs + "0" + stmp;
                else {
                    hs = hs + stmp;
                }
            }
            return hs.toUpperCase();
        } catch (Exception e) {
            return "";
        }
    }

}

 

运行结果

长链接:http://www.51bi.com/bbs/_t_278433840/
[0]:fa6bUr
[1]:ryEfeq
[2]:zAnuAn
[3]:auIJne
短链接:zAnuAn

  

分享到:
评论

相关推荐

    java短链接生成.zip

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

    Java实现短链转换项目

    在短链服务中,布隆过滤器可以防止重复生成相同的短链接。由于其占用空间小且查询速度快,可以有效地处理大量数据,避免了因重复生成短链导致的数据库冲突问题。然而,需要注意的是,布隆过滤器可能会有误判(False ...

    在线生成短链接的原因及实现工具.docx

    在线生成短链接是一种常见的互联网实践,它通过将冗长的URL转化为简短的字符串,带来了诸多益处。短链接的主要作用在于优化分享、提高用户体验、便于数据追踪以及增强链接的安全性。 首先,缩短内容长度是生成短...

    java短网址服务(TinyURL)生成算法

    Java 短网址服务(TinyURL)生成算法 本文主要介绍了 Java 短网址服务生成算法的实现细节,包括生成全局唯一的数字和实现进制的转换两个关键点。生成全局唯一的数字可以使用 Redis 的 incr 操作、MySQL 的 ...

    Java微信长链接转短链接

    使用微信接口制作的转短链接工具,需要有自己的微信测试号或者公众号生成的accesstoken,配置jdk环境变量才能使用(由于使用了exe4j打包,提示配置EXE_JAVA_HOME是和jdk环境变量一样的配置方法)

    基于Java的短链接生成工具设计与实现源码

    该项目是一款基于Java开发的短链接生成工具,集成了Java、Vue、JavaScript、CSS和HTML等多种语言技术,总文件量达到280个。主要包含187个Java源文件、22个PNG图片、19个Vue组件、11个XML、JavaScript和JSON文件等。...

    java 文字或链接生成二维码代码

    这个简单的例子展示了Java生成二维码的基本流程,但实际应用中可能需要考虑更多的细节,比如调整二维码的大小、颜色、边距等。此外,如果需要处理大量请求,可以考虑使用多线程或者异步处理来提高效率。对于链接生成...

    短链接生成及返回访问源码

    本文将深入探讨短链接生成及返回访问的原理,并结合提供的源码进行解析。 首先,让我们理解短链接的基本工作原理。传统的长URL可能包含很多参数,显得冗长且不便于记忆。短链接系统通过一个映射机制将长URL转化为...

    java 生成32位UUID

    生成32位的UUID在某些场景下很有用,比如在生成短链接、数据库主键或需要紧凑唯一标识时。Java标准库提供了一个`java.util.UUID`类,用于生成和操作UUID。然而,这个类默认生成的是128位的UUID,即32个16进制字符...

    2023最新防红短链接在线生成源码内置接口无广告.zip

    《2023最新防红短链接在线生成源码内置接口无广告》 在这个数字化的时代,网站和应用程序的安全性越来越受到重视。防红短链接,全称“防止被红包钓鱼的短链接”,是一种用于保护用户免受恶意链接攻击的技术。2023年...

    基于Java语言的短链接生成器设计源码

    该项目是一款基于Java语言的短链接生成器设计源码,包含37个文件,其中Java源文件19个,XML配置文件8个,并提供完整的开发环境支持,包括Git忽略、项目许可等必要文件。系统设计灵活,能够满足多种场景下的短链接...

    Java 短链接测试程序

    Java URL Shortener 是一个用于将长链接转换为短链接的测试程序,主要针对那些需要在有限空间内展示链接,如二维码生成、微博分享等场景。这个程序整合了国内外多个知名的短链服务API,使得开发者可以方便地进行长...

    java最小生成树动态演示

    它的基本思想是从图中任意一个顶点开始,逐步添加边到当前生成树中,每次添加的边连接的是树外的一个顶点和树内的一顶点,且这条边的权重是最小的。Prim算法可以使用优先队列(如Java中的`PriorityQueue`)来高效地...

    基于Java和HTML的短链接生成平台后端设计源码

    该平台为基于Java和HTML开发的短链接生成服务后端源码,包含202个文件,涵盖183个Java源代码文件、8个XML配置文件、5个YAML文件、1个Git忽略文件、1个Markdown文档、1个Lua脚本、1个配置文件、1个ICO图标文件和1个...

    AutoCode代码生成器(JAVA版)

    您是不是因为java的开发和维护繁琐而烦恼,目前政府机关、企业大都要求用java来开发项目,本软件将彻底解决您的后顾之忧,通过本软件的自动生成功能,生成的java代码规范、全部开源,不存在用隐含的内容,全部代码...

    (源码)基于SpringBoot和Redis的短链接生成系统.zip

    系统支持生成短链接、管理短链接、统计短链接访问量等功能,适用于需要短链接服务的各种场景。 ## 项目的主要特性和功能 1. 短链接生成支持将长链接转换为短链接,并生成对应的二维码。 2. 短链接管理提供短链接的...

    java源码包实例源码JAVA开发源码50个合集.zip

    Java生成自定义控件源代码.rar Java调色板面板源代码.rar Java跳棋(基于SWT).rar Java通讯录手机版源码.rar Java鼠标拖拽功能.rar 乐趣大型购物系统.rar 可实现网上对战和人机对战.rar 基于BS结构的Java可视化工作流...

    一键生成短域名生成系统.zip

    在某些平台上,频繁或大规模生成短链接可能会被视为垃圾信息,从而导致账号被限制或封禁。防封功能通常包括但不限于设置延迟生成、随机IP切换、限制生成速度等策略。 “只有几百k,也没的后台”,这表明该系统可能...

    一个基于SpringBoot 开发的在线短链生成系统.zip

    1、将长链接转换成短链接,访问短链接时, 302重定向至原始长链接 2、支持设置短链有效期 3、支持记录访问次数 一个基于SpringBoot 开发的在线短链生成系统源码 实现功能 1、将长链接转换成...

    短网址批量生成

    2. 调用API:使用编程语言(如Python、Java或JavaScript)编写脚本,连接到dwz.cn的API接口,发送请求并传递长URL列表。 3. 处理响应:API会返回每个URL的对应短码,你需要将其保存到另一个文件,以便后续使用。 4. ...

Global site tag (gtag.js) - Google Analytics