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 ...
随机推荐
- 【Noip模拟 20160929】选数
题目描述 现在有一排共N个数,你需要从中选出恰好K个.选出K个数后,计算它们两两差值的绝对值的最小值S.你需要确定选出哪K个,才能最大化这个S. 输入数据 输入第一行两个正整数N.K,含义如上. 输入 ...
- 一篇面经(BAT面试)(转)
0. 写在之前 首先呢我的面试经历和一些面霸和收割机的大神相比绝不算丰富,但我这三个月应该能代表很大一部分人的心路历程:从无忧无虑也无知的状态,然后遭遇挫败,跌入低谷,连续数天的黑暗,慢慢调整,逼着自 ...
- CSS 图像
CSS 图像 <上一节下一节> 通过CSS可以控制图像的大小和对齐方式. 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用C ...
- 微信小程序---分包加载(subpackages)及报错
某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载. 分包很简单,具体步骤如下: 在app.json中,创建subPackages,root表示分包A的 ...
- 微信小程序--getLocation需要在app.json中声明permission字段
在微信小程序开发中,需要获取用户所在地理位置,结果提示‘getLocation需要在app.json中声明permission字段’ 这是因为开发者需要填写获取用户地理位置的用途说明. 具体解决方法: ...
- Python学习—爬虫篇之破解ntml登陆问题
之前帮公司爬取过内部的一个问题单网站,要求将每个问题单的下的附件下载下来.一开始的时候我就遇到一个破解登陆验证的大坑...... (╬ ̄皿 ̄)=○ 由于在公司使用的都是内网,代码和网站的描述 ...
- Spring MVC 自动为对象注入枚举类型
原文地址:http://1358440610-qq-com.iteye.com/blog/2079048 如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一 ...
- 【JAVA】杨辉三角
ソース public Yanghui3jiao() { List<String[]> rowList = new ArrayList<String[]>(); List< ...
- mysql学习笔记--数据操作
一.插入数据 1. 语法:insert into 表名 (字段名.字段名,...) values (值1,值2...) 2. 注意: a. 插入字段的个数和顺序与值的个数和顺序必须一致 b. 通过de ...
- 333. Largest BST Subtree节点数最多的bst子树
[抄题]: Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where large ...