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"的压缩包文件提供了一个基于SpringBoot框架的Java实现,用于生成短链接。让我们深入探讨一下这个项目的核心知识点,以及如何利用它来创建和管理短链接。 首先,我们要了解SpringBoot。...
在短链服务中,布隆过滤器可以防止重复生成相同的短链接。由于其占用空间小且查询速度快,可以有效地处理大量数据,避免了因重复生成短链导致的数据库冲突问题。然而,需要注意的是,布隆过滤器可能会有误判(False ...
在线生成短链接是一种常见的互联网实践,它通过将冗长的URL转化为简短的字符串,带来了诸多益处。短链接的主要作用在于优化分享、提高用户体验、便于数据追踪以及增强链接的安全性。 首先,缩短内容长度是生成短...
Java 短网址服务(TinyURL)生成算法 本文主要介绍了 Java 短网址服务生成算法的实现细节,包括生成全局唯一的数字和实现进制的转换两个关键点。生成全局唯一的数字可以使用 Redis 的 incr 操作、MySQL 的 ...
使用微信接口制作的转短链接工具,需要有自己的微信测试号或者公众号生成的accesstoken,配置jdk环境变量才能使用(由于使用了exe4j打包,提示配置EXE_JAVA_HOME是和jdk环境变量一样的配置方法)
该项目是一款基于Java开发的短链接生成工具,集成了Java、Vue、JavaScript、CSS和HTML等多种语言技术,总文件量达到280个。主要包含187个Java源文件、22个PNG图片、19个Vue组件、11个XML、JavaScript和JSON文件等。...
这个简单的例子展示了Java生成二维码的基本流程,但实际应用中可能需要考虑更多的细节,比如调整二维码的大小、颜色、边距等。此外,如果需要处理大量请求,可以考虑使用多线程或者异步处理来提高效率。对于链接生成...
本文将深入探讨短链接生成及返回访问的原理,并结合提供的源码进行解析。 首先,让我们理解短链接的基本工作原理。传统的长URL可能包含很多参数,显得冗长且不便于记忆。短链接系统通过一个映射机制将长URL转化为...
生成32位的UUID在某些场景下很有用,比如在生成短链接、数据库主键或需要紧凑唯一标识时。Java标准库提供了一个`java.util.UUID`类,用于生成和操作UUID。然而,这个类默认生成的是128位的UUID,即32个16进制字符...
《2023最新防红短链接在线生成源码内置接口无广告》 在这个数字化的时代,网站和应用程序的安全性越来越受到重视。防红短链接,全称“防止被红包钓鱼的短链接”,是一种用于保护用户免受恶意链接攻击的技术。2023年...
该项目是一款基于Java语言的短链接生成器设计源码,包含37个文件,其中Java源文件19个,XML配置文件8个,并提供完整的开发环境支持,包括Git忽略、项目许可等必要文件。系统设计灵活,能够满足多种场景下的短链接...
Java URL Shortener 是一个用于将长链接转换为短链接的测试程序,主要针对那些需要在有限空间内展示链接,如二维码生成、微博分享等场景。这个程序整合了国内外多个知名的短链服务API,使得开发者可以方便地进行长...
它的基本思想是从图中任意一个顶点开始,逐步添加边到当前生成树中,每次添加的边连接的是树外的一个顶点和树内的一顶点,且这条边的权重是最小的。Prim算法可以使用优先队列(如Java中的`PriorityQueue`)来高效地...
该平台为基于Java和HTML开发的短链接生成服务后端源码,包含202个文件,涵盖183个Java源代码文件、8个XML配置文件、5个YAML文件、1个Git忽略文件、1个Markdown文档、1个Lua脚本、1个配置文件、1个ICO图标文件和1个...
您是不是因为java的开发和维护繁琐而烦恼,目前政府机关、企业大都要求用java来开发项目,本软件将彻底解决您的后顾之忧,通过本软件的自动生成功能,生成的java代码规范、全部开源,不存在用隐含的内容,全部代码...
系统支持生成短链接、管理短链接、统计短链接访问量等功能,适用于需要短链接服务的各种场景。 ## 项目的主要特性和功能 1. 短链接生成支持将长链接转换为短链接,并生成对应的二维码。 2. 短链接管理提供短链接的...
Java生成自定义控件源代码.rar Java调色板面板源代码.rar Java跳棋(基于SWT).rar Java通讯录手机版源码.rar Java鼠标拖拽功能.rar 乐趣大型购物系统.rar 可实现网上对战和人机对战.rar 基于BS结构的Java可视化工作流...
在某些平台上,频繁或大规模生成短链接可能会被视为垃圾信息,从而导致账号被限制或封禁。防封功能通常包括但不限于设置延迟生成、随机IP切换、限制生成速度等策略。 “只有几百k,也没的后台”,这表明该系统可能...
1、将长链接转换成短链接,访问短链接时, 302重定向至原始长链接 2、支持设置短链有效期 3、支持记录访问次数 一个基于SpringBoot 开发的在线短链生成系统源码 实现功能 1、将长链接转换成...
2. 调用API:使用编程语言(如Python、Java或JavaScript)编写脚本,连接到dwz.cn的API接口,发送请求并传递长URL列表。 3. 处理响应:API会返回每个URL的对应短码,你需要将其保存到另一个文件,以便后续使用。 4. ...