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

逻辑是:

  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")
//输出 "馒头加梨子"

加密后密文都不同,但是解密后都是"馒头加梨子"

原文地址:https://www.cnblogs.com/yangzhou33/p/9145997.html

时间: 2024-08-03 07:24:22

js生成随机固定长度字符串的简便方法的相关文章

JavaScript如何生成随机字母数字字符串

如何使用javascript生成随机字母数字字符串?下面本篇文章就来给大家介绍一下使用JavaScript生成随机字母数字字符串的方法,希望对大家有所帮助. 方法一:Math.random()方法和Math.floor()方法 ● 创建一个函数,该函数有两个参数,一个参数是我们想要生成的字符串的长度,另一个参数是我们想要在字符串中显示的字符. ● 声明新变量ans = ' '. ● 使用for循环以相反的顺序遍历字符串. ● 使用JavaScript的Math.random()方法生成随机字符串

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

前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 1 Math.random().toString(36).substr(2); 输出结果 解释 很有意思,研究了一下,基本上toString后的参数规定可以是2-36之间的任意整数,不写的话默认是10(也就是十进制),此时返回的值就是那个随机数. 若是偶数,返回的数值字符串都是短的,若是奇数,则返回的将是一个很大长度的表示值. 若<10 则都是数字组成,>10 才会包含字

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

本文出至:新太潮流网络博客 /** * [生成随机字符串] * @E-mial [email protected] * @TIME 2017-04-07 * @WEB http://blog.iinu.com.cn * @param integer $length [生成的长度] * @param integer $type [生成的类型] * @return [type] str [description] * @php 随机码类型:0,数字+大写字母:1,数字:2,小写字母:3,大写字母:4

PHP固定长度字符串

/** * 获取固定长度随机字符串 * @param $n * @return string * @throws Exception */ function gf_rand_str($n) { if (!is_int($n)) { throw new Exception('argument must be int'); } $alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $str = ''; for ($i=0; $i<$n; $i++) { $

js生成随机颜色

方法一: var getRandomColor = function(){ return '#' + (function(color){ return (color += '0123456789abcdef'[Math.floor(Math.random()*16)]) && (color.length == 6) ? color : arguments.callee(color); })(''); } 随机生成6个字符然后再串到一起,闭包调用自身与三元运算符让程序变得内敛. 方法二: v

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

数组的一些方法: 1.join()和split()方法 <script type="text/javascript">var x;var a=new Array();a[0]="XHTML";a[1]="CSS";a[2]="JavaScript";alert(a.join());alert(typeof(a.join));alert(typeof(a));</script>join() 方法用于把数组

js生成随机字符串

/** * param flag 是否是任意长度 * param min 任意长度最小值 * param max 任意长度最大值 */ function randomStr(flag, min, max) { var str = ""; var index = ""; var range = min; var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e

ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号

方法一: public static string GetString(string str, int length) { int i = 0, j = 0; foreach(char chr in str) { if((int)chr > 127) { i += 2; } else { i ++; } if (i > length) { str = str.Substring(0, j) + "..."; break; } j ++; } return str; } 方法

php中使用uniqid mt_rand 生成随机不重复字符串的方法

<?PHP      $str = uniqid(mt_rand(),1);      echo 'sha1: ',sha1($str);      echo '<br>';      echo 'MD5: ',md5($str); 采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值. 但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍) 第二种方法:GUID <?PHP        echo sprintf('%04X%04