java 62 进制转换
对比网站
https://tool.lu/hexconvert
@UtilityClass
public class Long62Util {private static char[] chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();/*** 初始化 62 进制数据,索引位置代表字符的数值,比如 A代表10,Z代表61等*/private static int scale = 62;private static char ZERO = '0';public static String to62String(long num) {return to62String(num, null);}/*** 将数字转为62进制 * * @param num Long 型数字 * @param length 转换后的字符串长度,不足则左侧补0 * @return 62进制字符串*/public static String to62String(long num, Integer length) {StringBuilder sb = new StringBuilder();int remainder = 0;while (num > scale - 1) {/** * 对 scale 进行求余,然后将余数追加至 sb 中,由于是从末位开始追加的,因此最后需要反转(reverse)字符串 */remainder = (int) (num % scale);sb.append(chars[remainder]);num = num / scale;}sb.append(chars[(int) num]);String value = sb.reverse().toString();if (length != null) {return StringUtils.leftPad(value, length, ZERO);} else {return value;}}private static int getIndex(char c) {for (int i = 0; i < chars.length; i++) {if (chars[i] == c) {return i;}}return -1;}/*** 给定的字符串是否为有效的ObjectId** @param s 字符串* @return 是否为有效的ObjectId*/public static boolean isValid(String s) {if (StringUtils.isBlank(s)) {return false;}char c;for (int i = 0; i < s.length(); i++) {c = s.charAt(i);if (c >= '0' && c <= '9') {continue;}if (c >= 'a' && c <= 'z') {continue;}if (c >= 'A' && c <= 'Z') {continue;}return false;}return true;}/*** 62进制字符串转为数字 * * @param str 编码后的62进制字符串 * @return 解码后的 10 进制字符串*/public static long longValue(String str) {/** * 将 0 开头的字符串进行替换 */str = str.replace("^0*", "");long num = 0;int index = 0;for (int i = 0; i < str.length(); i++) {/** * 查找字符的索引位置 */index = getIndex(str.charAt(i));/** * 索引位置代表字符的数值 */num += (long) (index * (Math.pow(scale, str.length() - i - 1)));}return num;}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
