短网址(ShortUrl)实现

C#: 实现一个短网址算法 短网址可以将长而复杂的URL转换为短小且易于记忆的URL,从而提供更方便的分享和使用体验。短网址算法的基本原理是将长URL映射到一个短的、唯一的标识符上,并将该标识符作为短网址的一部分。当用户访问短网址时,服务器会将短网址还原为原始的长URL,并将用户重定向到该URL。否则,我们生成一个长度为6的随机字符串作为新的短网址,并将其与长URL建立映射关系。然后,我们输出长URL、短网址以及通过短网址获取到的长URL。这表明我们成功地将长URL转换为短网址,并能够根据短网址获取到原始的长URL。 阅读详情

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

下面来看看程序部分:

     
     
  1. package basic; 
  2.  
  3. import util.Encript; 
  4.  
  5. public class ShortUrl { 
  6.     public static void main(String[] args) { 
  7.         String url = "http://www.sunchis.com"; 
  8.         for (String string : ShortText(url)) { 
  9.             print(string); 
  10.         } 
  11.     } 
  12.      
  13.     public static String[] ShortText(String string){ 
  14.         String key = "XuLiang";                 //自定义生成MD5加密字符串前的混合KEY 
  15.         String[] chars = new String[]{          //要使用生成URL的字符 
  16.             "a","b","c","d","e","f","g","h", 
  17.             "i","j","k","l","m","n","o","p", 
  18.             "q","r","s","t","u","v","w","x", 
  19.             "y","z","0","1","2","3","4","5", 
  20.             "6","7","8","9","A","B","C","D", 
  21.             "E","F","G","H","I","J","K","L", 
  22.             "M","N","O","P","Q","R","S","T", 
  23.             "U","V","W","X","Y","Z" 
  24.         }; 
  25.          
  26.         String hex = Encript.md5(key + string); 
  27.         int hexLen = hex.length(); 
  28.         int subHexLen = hexLen / 8; 
  29.         String[] ShortStr = new String[4]; 
  30.          
  31.         for (int i = 0; i < subHexLen; i++) { 
  32.             String outChars = ""; 
  33.             int j = i + 1; 
  34.             String subHex = hex.substring(i * 8, j * 8); 
  35.             long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16); 
  36.              
  37.             for (int k = 0; k < 6; k++) { 
  38.                 int index = (int) (Long.valueOf("0000003D", 16) & idx); 
  39.                 outChars += chars[index]; 
  40.                 idx = idx >> 5; 
  41.             } 
  42.             ShortStr[i] = outChars; 
  43.         } 
  44.          
  45.         return ShortStr; 
  46.     } 
  47.      
  48.     private static void print(Object messagr){ 
  49.         System.out.println(messagr); 
  50.     } 
  51. } 

现在可以直接使用ShortText(url)方法,可以等到下面四组值:

     
     
  1. ShortText("http://www.sunchis.com")[0];  //得到值:Jzyqma 
  2. ShortText("http://www.sunchis.com")[1];  //得到值:QBrMzm 
  3. ShortText("http://www.sunchis.com")[2];  //得到值:bQreM3 
  4. ShortText("http://www.sunchis.com")[3];  //得到值:VNBRna 

选取结果中四个值的任何一个值即可作为URL对应生成的短网址了。

Java短网址生成工具类(Murmurhash算法实现) 短网址服务通常会提供统计功能,可以追踪链接的点击次数、来源等信息,对于营销活动和数据分析很有帮助。: 短网址相比原始网址长度更短,可以节省字符空间,特别是在限制字符数的场景下,比如发送短信。: 短网址通常由随机字符或者简短的关键词组成,看起来更美观、简洁,易于记忆和分享。: 一些应用或平台可能会在显示较长的链接时进行截断,使用短网址可以避免这种情况。: 长网址可能包含敏感信息,使用短网址可以在一定程度上保护原始链接的隐私。: 有些短网址服务提供安全策略,可以检测和阻止恶意网址,提升用户安全体验。 阅读详情

相关推荐

C#:实现短网址(ShortUrl)算法(附完整源码)

C#:实现短网址(ShortUrl)算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 948

Java版短网址(ShortUrl)的算法

最近,我的项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有 找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算 法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法: http://www...

sun_gufeng的专栏 490

ChatGPT设置密钥后Codex免手机验证:配置顺序与身份凭证复用机制

API Key 是一种用于身份识别的凭证,其核心原理是通过预配置的密钥替代交互式登录流程。在开发工具中,密钥认证优先级通常高于会话认证,当本地存在有效密钥时,工具会直接复用该凭证,从而减少重复验证环节。这种机制的技术价值在于提升开发效率与配置一致性,尤其适用于多设备切换、CI/CD 流水线及编程辅助工具等场景。以 Codex 为例,在 ChatGPT 界面提前配置 API 密钥后,Codex 启动时可读取持久化存储的密钥,避免触发手机号验证,实现身份凭证的跨入口复用。

weixin_33940469的博客 474

C# 创建短链接和重定向长链接

希望这可以帮助你开始创建你自己的短链接API

木頭子 1262

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 265

S4-FPGA-K7板级原理图硬件实战

xilinx K7板级硬件实战

weixin_66510961的博客 6152

python 短网址_Python实现短网址ShortUrl的Hash运算实例讲解

本文实例讲述了Python实现短网址ShortUrl的Hash运算方法。分享给大家供大家参考。具体如下:shorturl实现常见的做法都是将原始Url存储到数据库,由数据库返回一个对应ID。以下要实现的是不用数据库支持就对原始URL进行shorturl hash。说到这里我们很容易想到MD5,固定长度,冲突概率小,但是32个字符,太长?我们以MD5为基础,将其字符缩短,同时要保证一定数量范围内ha...

weixin_36240214的博客 468

小红书私信接口与Hook技术实战:微信跳转卡片的合规与破解之道

本文深入探讨了小红书私信接口与Hook技术的实战应用,重点解析了微信跳转卡片的合规使用与破解方法。通过官方私信接口的合规玩法与Xposed框架的Hook技术对比,为开发者提供了技术选型指南和实战建议,帮助实现高效的用户跳转与转化。

weixin_30399821的博客 736

Java Net版短网址(ShortUrl)的算法及实现 待续

算法 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这...

weixin_33806914的博客 103

2026年中科曙光嵌入式软件岗位面试题库(附参考答案)

嵌入式系统与C/C++基础摘要 硬件与外设总线 SPI总线:高速全双工同步串行接口,采用SCLK、MOSI、MISO和CS信号线,支持一主多从架构,典型应用于Flash存储、传感器等高速外设。 I2C总线:两线制低速串行总线(SDA/SCL),支持多主多从,需注意地址冲突和信号完整性。 时序约束:包括建立时间、保持时间、时钟周期等,是保障电路稳定运行的关键。 AD转换:将模拟信号转换为数字信号,应用于传感器采集、音频处理等场景。 PC寄存器:存储下一条指令地址,控制程序执行流,在跳转和中断时自动更新。 C/

Open 69

下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

下载MNIST数据集并使用python将数据转换成NumPy数组首先来分析init_mnist函数接下来继续分析load_mnist函数实现数据集转换的python脚本的代码显示MNIST图像并确认数据 下载MNIST数据集并将数据转换成NumPy数组的Python脚本里面最重要的就是load_mnist函数,其他项目想要调用数据集的话,就可以调用load_mnist函数,得到一个字典类型的数据,字典的值是一个Numpy数组。 这些过程是如何实现的,现在开始逐字逐句分析源码: 在load_mnist函数中第

及时总结 4268

URL短地址压缩算法 微博短地址原理解析 (Java实现)

最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法: 再根据自己的理解,用Java

ZXL工作室 1238

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。

@优快云盲敲代码的阿豪的博客 946

短网址ShortUrl的算法

场景: 我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://t.cn/hrYnr0。为什么要这样做的,原因我想有这样几点:  1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。  2、短网址可以在我们项目里可以很好的对开放级URL进行管理

精益求精 1932

基于STM32、HAL库的ADE7880ACPZ-RL电能计量芯片驱动程序设计

@retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)PA6 (MISO) <--> SDO (SPI数据输出)PB0 (CS) <--> /CS (片选,低有效)

corlin6688的博客 668

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

短URL系统、301/302重定向

短 URL 系统是怎么设计的?https://yq.aliyun.com/articles/87600 短网址(short URL)系统的原理及其实现https://hufangyun.com/2017/short-url/ 相关博文:http://www.mahaixiang.cn/seoyjy/866.html spam(搜索引擎垃圾技术) 相关博文:htt...

weixin_30929295的博客 1445

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

短网址(short URL)系统的原理及其实现

短网址(short URL)系统的原理及其实现 https://hufangyun.com/2017/short-url/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 转载于:https://www.cnblogs.com/ducklyl/p/10728824.html...

ajmkwbm1128的博客 213

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#如何实现url短地址?C#短网址压缩算法与短网址原理入门

  c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例。 短网址映射算法: 将长网址md5生成32位签名串,分为4段,每段8个字节;对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处理;这30位分成6段,每5位的数字作为字母表...

weixin_30377461的博客 510
上一篇: Redis实现分布式锁
下一篇: Java多线程:ThreadPoolExecutor详解
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值