简单实现短链接算法
2016-04-28 13:30
513 查看
package com.mfyk.util;
import java.security.MessageDigest;
public class Code {
private Code(){}
/** 短链接可选字符 */
private final static char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
/** md5的char值 */
private final static char[] md5chars = "1234567890EADCBF".toCharArray();
/** 30位的long类型数值,右移运算可以达30 */
static long max = Long.parseLong("3FFFFFFF", 16);
/** 61的最大值以便于从chars中选择字符 */
static long min = Long.parseLong("0000003D", 16);
public static String shortText(String md5, int start){
/** 短链接返回数据 */
StringBuilder returnValue = new StringBuilder();
String subHex = md5.substring(start*8, (start+1)*8);
/** 获取字串运算索引 */
long idx = max & Long.parseLong(subHex, 16);
/** 获取6位数的短码,6*5=30 */
for(int k = 0; k < 6; k++){
int index = (int) (min & idx);
returnValue.append(chars[index]);
idx = idx >> 5;
}
return returnValue.toString();
}
/**
* md5
* @param s
* @return
*/
public final static String md5(String s) {
try {
byte[] btInput = s.getBytes();
/** 获得MD5摘要算法的 MessageDigest 对象 */
MessageDigest mdInst = MessageDigest.getInstance("MD5");
/** 使用指定的字节更新摘要 */
mdInst.update(btInput);
/** 获得密文 */
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = md5chars[byte0 >>> 4 & 0xf];
str[k++] = md5chars[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
}
import java.security.MessageDigest;
public class Code {
private Code(){}
/** 短链接可选字符 */
private final static char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
/** md5的char值 */
private final static char[] md5chars = "1234567890EADCBF".toCharArray();
/** 30位的long类型数值,右移运算可以达30 */
static long max = Long.parseLong("3FFFFFFF", 16);
/** 61的最大值以便于从chars中选择字符 */
static long min = Long.parseLong("0000003D", 16);
public static String shortText(String md5, int start){
/** 短链接返回数据 */
StringBuilder returnValue = new StringBuilder();
String subHex = md5.substring(start*8, (start+1)*8);
/** 获取字串运算索引 */
long idx = max & Long.parseLong(subHex, 16);
/** 获取6位数的短码,6*5=30 */
for(int k = 0; k < 6; k++){
int index = (int) (min & idx);
returnValue.append(chars[index]);
idx = idx >> 5;
}
return returnValue.toString();
}
/**
* md5
* @param s
* @return
*/
public final static String md5(String s) {
try {
byte[] btInput = s.getBytes();
/** 获得MD5摘要算法的 MessageDigest 对象 */
MessageDigest mdInst = MessageDigest.getInstance("MD5");
/** 使用指定的字节更新摘要 */
mdInst.update(btInput);
/** 获得密文 */
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = md5chars[byte0 >>> 4 & 0xf];
str[k++] = md5chars[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
}
相关文章推荐
- (5)学习ArduPilot源码——shetch范例
- 函数
- JMeter 初体验/Java 网络请求脚本添加
- Fragment的生命周期
- javascript运行机制之执行顺序详解(修正原作者一处错误)
- 自动将String类型的XML解析成实体类
- ios 单击和双击手势
- 中国半导体产业同时获三大支撑千载难逢
- 浅谈使用ArcPy执行大数据量处理任务
- 函数调用的本质与函数指针
- 像UE一样将二进制文件转换为16进制显示
- linux基础(四)
- Qt 中动态库(.so)静态库(.a)的使用
- Spring 表达式语言(SpEL)
- c#字符串的格式化输出
- js 模拟实现php类中的静态变量
- Java异常体系结构
- 威联通NAS 网站无法登录,可以ssh情况下重启设备方法
- keyboard键盘demo
- spring注入时机的问题