package *.*.*.util;
import java.security.MessageDigest;
import java.util.Random;
import org.apache.log4j.Logger;
public class ShortUrlUtil {
private static Logger logger = Logger.getLogger(ShortUrlUtil.class);
public static String getShortURL(String url){
String[] aResult = convertUrl(url);//将产生4组6位字符串
Random random=new Random();
//随机取一个作为短链
int j=random.nextInt(4);//产成4以内随机数
logger.info("短链接:"+aResult[j]+";长链接:"+url);
return aResult[j];
}
private static String[] convertUrl(String url) {
// 可以自定义生成 MD5 加密字符传前的混合 KEY
String key = "qiuyouzone";
// 要使用生成 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
*/
private 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 "";
}
}
}
分享到:
相关推荐
长链接转短链接
delphi开发微信API程序(长链接转短链接),自己写的,用微信提供的API,长链接转短链接。使用方便
实用的微信API长链接转短链接程序,delphi开发.
android 中长连接变短链接的几种方式集合,希望对大家有所帮助。。。
把我们平时用到的那些长连接转为短链接,这样可以省去一些资源,发短信,转为二维码都可以省下很大空间。此Demo 是在Edittext里面填好你的长连接,然后点击按钮转为为短链接,点击复制短链接的按钮,就可以成功复制...
1、将长链接转换成短链接,访问短链接时, 302重定向至原始长链接 2、支持设置短链有效期 3、支持记录访问次数 一个基于SpringBoot 开发的在线短链生成系统源码 实现功能 1、将长链接转换成...
下面小编就为大家带来一篇浅谈Java代码的 微信长链转短链接口使用 post 请求封装Json(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
短链接的好处: 1、内容需要; 2、用户友好; 3、便于管理。 下面是用PHP实现短网址转换的算法,代码如下: PHP <?php //短网址生成算法 class ShortUrl { //字符表 public static $charset = 0123456789...
IOS 长链接与短链接之间的转换 首先需要将字符串使用md5加密,添加NSString的md5的类别方法如下 .h文件 #import @interface NSString (md5) -(NSString *) md5HexDigest; @end .m文件 #import NSString+md5.h...
本文实例讲述了C#实现类似新浪微博长URL转短地址的方法。分享给大家供大家参考。具体如下: 一、前台判断用户输入URL的JS代码如下。 function CheckInput() { var $txtLength = $("#inp_text").val().length; if ...
启科网络短网址程序,自带点击统计功能-可自定义短网址程序,对于网络推广人员很有用,自建短网址,数据掌握在自己手里,可随时查看访问统计,可随时修改失效长链接,保证推广链接长期有效,防止用第三方短网址暗中...
使用netty实现TCP长链接消息写入kafka以及kafka批量消费数据,数据可以批量进行操作
NULL 博文链接:https://luoshi0801.iteye.com/blog/2168502
Laravel短网址 Laravel Short Url是一个允许您缩短URL的软件包。安装和作曲家一起 composer require gallib/laravel-short-url然后跑 ...
最近项目中引入了实时接收服务器数据的功能,考量后通过WebSocket长链接来实现。 1、建立在 TCP 协议之上,服务器端的实现比较容易。 2、与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 ...
leetcode中国短的 使用杂音散列函数。 URL 缩短服务。 用法 package main import ( "fmt" "github.com/golang/glog" "github.com/googege/short" "os" ) var ( path = "https://t.cn/" longURL = ...
ShorturlAPI 长链接转短链接 TicketAPI JSAPI ticket ComponentAPI 第三方平台开发 工具类 PayUtil 支付工具类,生成JS支付,原生支付 SignatureUtil 签权生成、验证 XMLConverUtil XML 对象转换(JAXB) Js...
1. 题目要求 2. 短链长度 3. 长链转短链算法 4. 数据库设计 5. 对应用服务器做负载均衡 6. 应用层设计
长链非编码RNA在肺癌中的研究进展,李博野,张文美,肺癌是全球发病率及死亡率最高的恶性肿瘤,早期诊断和治疗对降低肺癌死亡率具有重要意义。长链非编码RNA(lncRNA)是长度大于200个核
:laptop: 简短(网址缩短) 一种简单而有用的 Web 服务,可将长 URL 压缩为较短的 URL。特征通用网址缩短自定义 URL 缩短易于与其他应用程序集成开放端点缩短给定的长 URL : POST /api/short 使用自定义代码缩短 URL...