0
点赞
收藏
分享

微信扫一扫

JAVA 短链码生成工具类

zhongjh 2022-04-17 阅读 54

}

/**

  • 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©;

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);

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

字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?

ram data 需要编码的 数据

  • @param urlSafe 返回url合法字符

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

*/

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

byte [] md5Code = rawEncode(data);

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

[外链图片转存中…(img-ZLOexaZg-1650171108789)]

举报

相关推荐

0 条评论