概述

碰到一个需求:用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生成随机固定长度字符串的简便方法的更多相关文章

  1. JS生成随机字符串的多种方法

    这篇文章主要介绍了JS生成随机字符串的方法,需要的朋友可以参考下 下面的一段代码,整理电脑时,记录备查. <script language="javascript"> ...

  2. 【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串

    在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,其中Left函数表示从开始字符向后截取多少个字符,Right函数表 ...

  3. 【转载】 Sqlserver使用Left函数从最左边开始截取固定长度字符串

    在Sqlserver数据库的字符串操作中,截取字符串是最常见的操作,sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING(),如果从第一个字符即最左边位置 ...

  4. JS生成随机的由字母数字组合的字符串

    前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法   1 Math.random().toString(36).substr( ...

  5. PHP生成随机或者唯一字符串

    本文出至:新太潮流网络博客 /** * [生成随机字符串] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http://blog.i ...

  6. PHP固定长度字符串

    /** * 获取固定长度随机字符串 * @param $n * @return string * @throws Exception */ function gf_rand_str($n) { if ...

  7. MOCK.JS 生成随机数据,拦截 Ajax 请求

    mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...

  8. js 生成随机炫彩背景

    在浏览 https://ghost.org/xxxx/ 时. 可以使用 background-size: cover; 加上很小的像素图,放大后实现炫彩背景效果. 使用 js canvas 随机生成小 ...

  9. js中的数组和字符串的一些方法

    数组的一些方法: 1.join()和split()方法 <script type="text/javascript">var x;var a=new Array();a ...

随机推荐

  1. 数据预处理:独热编码(One-Hot Encoding)和 LabelEncoder标签编码

    一.问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 离散特征的编码分为两种情况: 1.离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one- ...

  2. xadmin设置

    1.xadmin配置 INSTALLED_APPS = ( ... 'xadmin' , 'crispy_forms' , 'reversion' , ... ) 2.注册类 import xadmi ...

  3. 学JS的心路历程 - JS应用

    各家电商网站都推出了各种活动和现今优惠券,当时在逛PTT时看到了有篇文章,提供代码教大家用JS的方式抢票,看了一下后发现好像很多人好奇这是怎么做的,于是就想说想一篇文章来讲解一下. 我们先来看一下折价 ...

  4. 学习linux—— VMware 安装 ubantu 18 如何连接wifi

    1 适配器设置 修改本地连接 2 修改VMware的虚拟网络编辑器 3 虚拟机设置

  5. pytorch入门之安装和配置

    pytorch是一种python接口的深度学习框架,其他的框架还有caffe,tensorflow等等. 1,pytorch目前支持linux和OSX两种系统.支持的Python版本有2.7,3.5, ...

  6. Python设计模式 - UML - 包图(Package Diagram)

    简介 包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系.一个包图可以由任何一种UML图组成,可容纳的元素有类.接口.组件.用例和其他包等.包是UML中非常常用的元素,主要作用是分类 ...

  7. 语义分割之Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 在本文中,我们通过 基于自我约束机制捕获丰富的上下文依赖关系来解决场景分割任务.       与之前通过多尺 ...

  8. extern和include的作用

    首先要搞清楚的是.h头文件中都是一些声明性的语句,是不分配内存的,所以头文件中有对函数的声明,有define语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的 ...

  9. Git的操作方法

    创建仓库 git clone 加上你的远程仓库克隆下来 git add . 把你文件里面的改动更改添加到git里面 git status 查看状态,更新了那些内容 git commit -m" ...

  10. Quartz.Net进阶之二:关于触发器的更多信息

    与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...