代码工具---长链接转换短链接
生活随笔
收集整理的這篇文章主要介紹了
代码工具---长链接转换短链接
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方式一
缺點:數據加密性不好,容易被猜出來,比如,產生數據:00001、然后被惡意撞庫00002
優點:嚴格的自增id,不會產生重復的短key
maven 依賴
工具源碼:
import org.apache.commons.lang.StringUtils;/*** @author chunyang.leng* @date 2021-10-25 9:17 上午*/ public class ShortUrl {/*** 進制*/private static final int SCALE = 62;/*** 最小長度,超過該長度,自動補0*/private static final int MIN_LENGTH = 5;/*** 常量字符串*/private static final String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";/*** 數字轉指定進制編碼* @see ShortUrl#SCALE 進制* @param num 待轉換待數據id,可以為雪花id,或者數據庫自增數據id* @return 62進制編碼*/public static String encode(long num) {StringBuilder sb = new StringBuilder();int remainder;while (num > SCALE - 1) {// 對 scale 進行求余,然后將余數追加至 sb 中,由于是從末位開始追加的,因此最后需要反轉字符串remainder = Long.valueOf(num % SCALE).intValue();sb.append(chars.charAt(remainder));// 除以進制數,獲取下一個末尾數num = num / SCALE;}sb.append(chars.charAt(Long.valueOf(num).intValue()));String value = sb.reverse().toString();return StringUtils.leftPad(value, MIN_LENGTH, '0');}/*** 指定進制轉為數字* @see ShortUrl#SCALE 進制* @param str 加密字符串* @return 原始數據id*/public static long decode(String str) {//將 0 開頭的字符串進行替換str = str.replace("^0*", "");long value = 0;char tempChar;int tempCharValue;for (int i = 0; i < str.length(); i++) {//獲取字符tempChar = str.charAt(i);//單字符值tempCharValue = chars.indexOf(tempChar);//單字符值在進制規則下表示的值value += (long) (tempCharValue * Math.pow(SCALE, str.length() - i - 1));}return value;}}方式二
缺點:依托外部存儲,需要自行解決存儲和kv映射問題,包括并發問題等,生成的key可能存在碰撞情況
優點:加密型好,撞庫可能性不大
總結
以上是生活随笔為你收集整理的代码工具---长链接转换短链接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python解决数学问题_用python
- 下一篇: html实现播放暂停,html如何实现播