js生成隨機固定長度字符串的簡便方法
阿新 • • 發佈:2018-06-06
func tostring %u nco ring nds 方法 並且 也有
概述
碰到一個需求:用js生成固定長度的字符串。在網上查了很多資料,網上的方法都比較麻煩。我自己靈光一現,實現了一個比較簡單的方法。記錄下來,供以後開發時參考,相信對其他人也有用。
js生成隨機字符串
js生成隨機字符串有一個奇妙的寫法:
//輸出隨機字符串
const randStr = () => Math.random().toString(36).substr(2);
瀏覽器開發者工具輸入5次,輸出如下:
"4cc9gd4sbwd" "ox9r8g6g7h" "fejq6b7up7e" "c1w7r88tnx" "cokjhpxsycq" "jn5eue1vmp"
可以看到,字符串是隨機的,但是長度不固定。
生成長度固定的字符串
昨天學習js函數式編程,所以靈機一動,利用遞歸的方法,並且傳入一個函數,來簡便的把一個字符串變成想要的長度:
//字符串調整為len位
const supplyFunc = (str, len) => {
if(str.length > len) return str.substr(0, len);
if(str.length < len) return supplyFunc(str + randStr(), len);
return str;
}
邏輯是:
- 如果字符串長度超過len位,那麽直接截取就行。
- 如果字符串長度不足len位,用randStr()再生成一段隨機字符串進行拼接,然後遞歸,直到長度超過len位。
然後寫一個函數來自定義長度,比如輸出一個長度為10的隨機字符串的函數:
//隨機len位的字符串
const str10 = () => supplyFunc(randStr(), 10);
輸入5次,輸出如下:
"y3tas9bqzi"
"2pmi80fs0e"
"i5dcde4g7q"
"uyoa9q3rmj"
"ty7ymuxm0m"
可以看到,全是長度為10的字符串。
建議加密解密函數
然後裏面上面的函數,可以自制一個js加密解密函數:
//加密函數
const encode = str => str10() + escape(str) + str10();
//解密函數
const decode = str => unescape(str.substr(10, str.length - 20));
比如作如下試驗:
encode('饅頭加梨子')
//輸出 "qnhbj5yo9k%u9992%u5934%u52A0%u68A8%u5B50069keq6dy8"
encode('饅頭加梨子')
//輸出 "3vz6tr2shp%u9992%u5934%u52A0%u68A8%u5B50l4f8mva6bn"
encode('饅頭加梨子')
//輸出 "f6qqsauzek%u9992%u5934%u52A0%u68A8%u5B505g64gndpuk"
decode("qnhbj5yo9k%u9992%u5934%u52A0%u68A8%u5B50069keq6dy8")
//輸出 "饅頭加梨子"
decode("3vz6tr2shp%u9992%u5934%u52A0%u68A8%u5B50l4f8mva6bn")
//輸出 "饅頭加梨子"
decode("f6qqsauzek%u9992%u5934%u52A0%u68A8%u5B505g64gndpuk")
//輸出 "饅頭加梨子"
加密後密文都不同,但是解密後都是"饅頭加梨子"。
js生成隨機固定長度字符串的簡便方法