1. 程式人生 > >js生成隨機固定長度字符串的簡便方法

js生成隨機固定長度字符串的簡便方法

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

邏輯是:

  1. 如果字符串長度超過len位,那麽直接截取就行。
  2. 如果字符串長度不足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生成隨機固定長度字符串的簡便方法