js生成随机固定长度字符串的简便方法
概述
碰到一个需求:用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生成随机固定长度字符串的简便方法的更多相关文章
- JS生成随机字符串的多种方法
这篇文章主要介绍了JS生成随机字符串的方法,需要的朋友可以参考下 下面的一段代码,整理电脑时,记录备查. <script language="javascript"> ...
- 【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串
在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,其中Left函数表示从开始字符向后截取多少个字符,Right函数表 ...
- 【转载】 Sqlserver使用Left函数从最左边开始截取固定长度字符串
在Sqlserver数据库的字符串操作中,截取字符串是最常见的操作,sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING(),如果从第一个字符即最左边位置 ...
- JS生成随机的由字母数字组合的字符串
前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 1 Math.random().toString(36).substr( ...
- PHP生成随机或者唯一字符串
本文出至:新太潮流网络博客 /** * [生成随机字符串] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http://blog.i ...
- PHP固定长度字符串
/** * 获取固定长度随机字符串 * @param $n * @return string * @throws Exception */ function gf_rand_str($n) { if ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- js 生成随机炫彩背景
在浏览 https://ghost.org/xxxx/ 时. 可以使用 background-size: cover; 加上很小的像素图,放大后实现炫彩背景效果. 使用 js canvas 随机生成小 ...
- js中的数组和字符串的一些方法
数组的一些方法: 1.join()和split()方法 <script type="text/javascript">var x;var a=new Array();a ...
随机推荐
- TCC细读 - 1 例子流程
http://www.iocoder.cn/categories/TCC-Transaction/ https://github.com/changmingxie/tcc-transaction 细读 ...
- Python 高阶函数map(),filter(),reduce()
map()函数,接收两个参数,一个是函数,一个是序列,map()把传入的函数依次作用于序列的每个元素,并把结果作为新的序列返回: aa = [1, 2, 3, 4, 5] print("ma ...
- docker报错
用docker搭建环境时可能会遇到错误:No releases available for package "xxxx" No releases available for pac ...
- 关于extern的使用
学的时候不认真总结,用的时候就一堆bug. 上回也是调extern调了半天,今天又犯老毛病. data 比如说是要用到的的在main函数中不断刷新的量.那么这个unsigned int data 要写 ...
- vue单页面处理SEO问题
设置vue 单页面meta info信息 vue-meta-info,(https://github.com/muwoo/vue-meta-info)如果需要单页面SEO,可以和 prerender- ...
- Page Visibility(网页可见性) API与登录同步引导页实例页面
页面1 HTML代码: <p id="loginInfo"></p> JS代码: (function() { if (typeof pageVis ...
- idea编辑项目出现【Information:java: javacTask: 源发行版 7 需要目标发行版 1.7】
在编译项目时候出现问题: Information:java: javacTask: 源发行版 7 需要目标发行版 1.7 解决方案:按着图片操作,这几个地方设置的一样就可以了
- H5滑条(input type=range)
input[type=range] { -webkit-appearance: none; width: 230px; border-radius: 10px; /*这个属性设置使填充进度条时的图形为 ...
- Laravel5 (cli)命令行执行脚本及定时任务
Artisan是Laravel自带的命令行接口名称,它提供了很多有用的命令想要查看所有可用的Artisan命令,可使用list命令查看: 1 php artisan list 每个命令都可以用help ...
- [SpringBoot]Web综合开发-笔记
Web开发 Json接口开发 @RestController 给类添加 @RestController 即可,默认类中的方法都会以 json 的格式返回. 自定义filter filter作用: 用于 ...