写点什么

JAVA 短链码生成工具类

  • 2022 年 4 月 17 日
  • 本文字数:1516 字

    阅读完需:约 5 分钟

}


/**


  • 62 进制字符串转为数字

  • @param str 编码后的 62 进制字符串

  • @return 解码后的 10 进制字符串


*/


public static long decode(String str) {


/*


将 0 开头的字符串进行替换


*/


str = str.replace("^0*", "");


long num = 0;


int index;


for (int i = 0; i < str.length(); i++) {


/*


查找字符的索引位置


*/


index = chars.indexOf(str.charAt(i));


/*


索引位置代表字符的数值


*/


num += (long) (index * (Math.pow(scale, str.length() - i - 1)));


}


// id 混淆算法


long snum = num & 0xff000000;


snum += (num & 0x00ff0000) >> 8;


snum += (num & 0x0000ff00) << 8;


snum += (num & 0x000000f0) >> 4;


snum += (num & 0x0000000f) << 4;


return snum;


}


public static String Md5CodeEncode(String longUrl, int urlLength) {


if (urlLength < 4 ) {


urlLength = 8;// defalut length


}


StringBuilder sbBuilder = new StringBuilder(urlLength + 2);


String md5Hex = "";


int nLen = 0;


while (nLen < urlLength) {


// 这个方法是先 md5 再 base64 编码 参见


// https://github.com/ndxt/centit-commons/blob/master/centit-utils/src/main/java/c 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 om/centit/support/security/Md5Encoder.java


md5Hex = Md5Encoder.encodeBase64(md5Hex + longUrl);


for(int i=0;i<md5Hex.length();i++){


char c = md5Hex.charAt(i);


if(c != '/' && c != '+'){


sbBuilder.append(c);


nLen ++;


}


if(nLen == urlLength){


break;


}


}


}


return sbBuilder.toString();


}


public static void main(String[] args) {


System.out.println("62 进制:" + encode(1000000001L, 6));


System.out.println("10 进制:" + decode("15t2ps"));


System.out.println( Md5CodeEncode("http://abcd.cn/JCccc.html",6));


}


}


Md5Encoder.java


import org.apache.commons.codec.binary.Base64;


import org.apache.commons.codec.binary.Hex;


import org.slf4j.Logger;


import org.slf4j.LoggerFactory;


import java.io.UnsupportedEncodingException;


import java.security.MessageDigest;


import java.security.NoSuchAlgorithmException;


/**


  • @Author : JCccc

  • @CreateTime : 2019/11/27

  • @Description :


**/


public abstract class Md5Encoder {


private Md5Encoder() {


throw new IllegalAccessError("Utility class");


}


protected static final Logger logger = LoggerFactory.getLogger(Md5Encoder.class);


pu Java 开源项目【ali1024.coding.net/public/P7/Java/git】 blic static byte[] rawEncode(byte[] data){


MessageDigest MD5;


try {


MD5 = MessageDigest.getInstance("MD5");


MD5.update(data, 0, data.length);


return MD5.digest();


} catch (NoSuchAlgorithmException e) {


logger.error(e.getMessage(),e);//e.printStackTrace();


return null;


}


}


public static String encode(byte[] data){


byte [] md5Code = rawEncode(data);


if(md5Code!=null){


return new String(Hex.encodeHex(md5Code));


} else {


return null;


}


}


public static String encode(String data){


try {


return encode(data.getBytes("utf8"));


} catch (UnsupportedEncodingException e) {


logger.error(e.getMessage(),e);//e.printStackTrace();


return null;


}


}


/**


  • 将 md5 编码进行 base64 编码,去掉最后的两个==,16 位的 md5 码 base64 后最后两位肯定是==

  • @param data 需要编码的 数据

  • @param urlSafe 返回 url 合法字符

  • @return 将 md5 编码进行 base64 编码,去掉最后的两个==


*/


public static String encodeBase64(byte[] data, boolean urlSafe){


byte [] md5Code = rawEncode(data);

本次面试答案,以及收集到的大厂必问面试题分享:


用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
JAVA 短链码生成工具类_Java_爱好编程进阶_InfoQ写作平台