通过JS生成由字母与数字组合的随机字符串
在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定)
使用Math.random()与toString()方法的结合
先看一下这个方式:
Math.random().toString(36);
结果:0.9kfiead48ntoString后的参数规定可以是2-36之间的任意整数,不写的话默认是10(也就是十进制),此时返回的值就是那个随机数。
- 若是偶数,返回的数值字符串都是短的,若是奇数,则返回的将是一个很大长度的表示值。
- 若
<10则都是数字组成,>10才会包含字母。
所以如果想得到一长串的随机字符,则需使用一个 > 10 且是奇数的参数。但是由于返回的是小数点,所以需要截取,可以使用slice(2) 。这儿使用substr()方法。如下:
Math.random().toString(36).substr(2);
结果:p3bz2xrzsam
但是上面的方式只是随机了,位数不确定。怎样来控制在一个范围或者固定的位数呢?看下面的方法。
常规的函数写法
/** 随机生成固定位数或者一定范围内的字符串数字组合
* @param {Number} min 范围最小值
* @param {Number} max 范围最大值,当不传递时表示生成指定位数的组合
* @returns {String} 返回字符串结果
* */
function randomRange(min, max){
var returnStr = "",
range = (max ? Math.round(Math.random() * (max-min)) + min : min),
arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; for(var i=0; i<range; i++){
var index = Math.round(Math.random() * (arr.length-1));
returnStr += arr[index];
}
return returnStr;
} var rand01 = randomRange(10,22);
var rand02 = randomRange(10,36);
var rand03 = randomRange(10);
var rand04 = randomRange(10);
结果:
VkdWQnIOKntsp
UoUUNtGJrHVl7UMc9jlvYjUr
1F1ck8I7yV
SEPGPzuO5F
函数写法优化
想想上面的arr这样写太繁琐,也可以写成字符串的形式,实现方式也差不多只是稍微变一下:
function randomRange(min, max){
var returnStr = "",
range = (max ? Math.round(Math.random() * (max-min)) + min : min),
charStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for(var i=0; i<range; i++){
var index = Math.round(Math.random() * (charStr.length-1));
returnStr += charStr.substring(index,index+1);
}
return returnStr;
}
var rand01 = randomRange(10,22);
var rand02 = randomRange(10,36);
var rand03 = randomRange(10);
var rand04 = randomRange(10);
结果:
Jpjtfe4S7aOSUAiGuYwK
n1mR5bDNf4jRBfM
j6HaBH7fZl
KbbHNw8V4Y
扩展:从指定的字符串生成组合
/** 随机生成固定位数或者一定范围内的字符串数字组合
* @param {Number} min 范围最小值
* @param {Number} max 范围最大值,当不传递时表示生成指定位数的组合
* @param {String} charStr指定的字符串中生成组合
* @returns {String} 返回字符串结果
* */
function randomRange(min, max, charStr){
var returnStr = "",
range;
if(typeof max == 'string'){
charStr = max;
}
range = ((max && typeof max == 'number') ? Math.round(Math.random() * (max-min)) + min : min);
charStr = charStr || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for(var i=0; i<range; i++){
var index = Math.round(Math.random() * (charStr.length-1));
returnStr += charStr.substring(index,index+1);
}
return returnStr;
} var rand01 = randomRange(10,22);
var rand02 = randomRange(5,8,'abcdef012');
var rand03 = randomRange(10);
var rand04 = randomRange(5,'123');
结果:
La2vVO4jrXZlHVLBs8b5K
1bc0cd1
ae888oluQX
32232
进一步优化,不传递参数,默认生成指定位数的字符串组合
/** 随机生成固定位数或者一定范围内的字符串数字组合
* @param {Number} min 范围最小值
* @param {Number} max 范围最大值,当不传递时表示生成指定位数的组合
* @param {String} charStr指定的字符串中生成组合
* @returns {String} 返回字符串结果
* */
function randomRange(min, max, charStr){
var returnStr = "",
range;
if(typeof min == 'undefined'){
min = 10;
}
if(typeof max == 'string'){
charStr = max;
}
range = ((max && typeof max == 'number') ? Math.round(Math.random() * (max-min)) + min : min);
charStr = charStr || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for(var i=0; i<range; i++){
var index = Math.round(Math.random() * (charStr.length-1));
returnStr += charStr.substring(index,index+1);
}
return returnStr;
} var rand01 = randomRange();
结果:
ohcjkCLtuL
在优化,根据ASCII码生成组合
通过打印:
console.log('9'.charCodeAt(0)); //0-9ASCII范围:48-57
console.log('a'.charCodeAt(0));// a-zASCII范围:97-122
console.log('A'.charCodeAt(0));// A-ZASCII范围:65-90
常见字符对应的ASCII码
a-z 97-122A-Z 65-900-9 45-57
其实知道了这个我们就不需要写那么长的charStr字符串
/** 随机生成固定位数或者一定范围内的字符串数字组合
* @param {Number} min 范围最小值
* @param {Number} max 范围最大值,当不传递时表示生成指定位数的组合
* @param {String} charStr指定的字符串中生成组合
* @returns {String} 返回字符串结果
* */
function randomRange(min, max, charStr){
var returnStr = "", //返回的字符串
range; //生成的字符串长度 //随机生成字符
var autoGetStr = function(){
var charFun = function(){
var n= Math.floor(Math.random()*62);
if(n<10){
return n; //1-10
}
else if(n<36){
return String.fromCharCode(n+55); //A-Z
}
else{
return String.fromCharCode(n+61); //a-z
}
}
while(returnStr.length< range){
returnStr += charFun();
}
}; //根据指定的字符串中生成组合
var accordCharStrGet = function(){
for(var i=0; i<range; i++){
var index = Math.round(Math.random() * (charStr.length-1));
returnStr += charStr.substring(index,index+1);
}
};
if(typeof min == 'undefined'){
min = 10;
}
if(typeof max == 'string'){
charStr = max;
}
range = ((max && typeof max == 'number') ? Math.round(Math.random() * (max-min)) + min : min); if(charStr){
accordCharStrGet();
}else{
autoGetStr();
}
return returnStr;
} var rand01 = randomRange();
var rand02 = randomRange(5,8,'abcdef012');
var rand03 = randomRange(10);
var rand04 = randomRange(5,'123');
结果:
S0yIEsPj4Q
dff0d
Zx93g07ewD
22232
参考地址
通过JS生成由字母与数字组合的随机字符串的更多相关文章
- Java实现随机生成由字母、数字组合的N位随机数
通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...
- JS生成1000个数字加字母的不重复的随机字符串
周五,快下班了,正收拾东西准备走人,项目经理突然让我给他做个Excel,1000个数字加字母组合的密码,不重复,下班前给. 我直接懵了,Excel不会,估计是要写个什么命令才能生成出来,于是想着有没有 ...
- js生成随机码(只含有数字和字母的随机码)
/*** randomWord 产生任意长度随机字母数字组合** randomFlag 是否任意长度 min 任意长度最小位[固定位数] max 任意长度最大位*/ function randomWo ...
- JS生成限定整数区间范围内的随机整数
对于整数区间获取随机整数: m,n均为整数,且n>m. 获取[m,n)区间内的随机整数: 1 var aNumber = (n - m) * Math.random() + m; 2 var r ...
- 绘制字母和数字组合的验证码(原生php)
<?php $font = array('font/FZZQJW.TTF','font/STHUPO.TTF');//字体 $str = '689acdefhjkmnpqrtuvwxyACDEF ...
- JS 的map和array集合组合返回JSON字符串
使用map 和array 返回自定义对象的JSON字符串: function getObjectJSON() { var array = new Array(); for (var i = 0; i ...
- js随机生成字母数字组合的字符串 随机动画数字
效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...
- JS生成随机的由字母数字组合的字符串
前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 1 Math.random().toString(36).substr( ...
- php生成随机字符串和验证码的类
网上有很多的php随机数与验证码的代码与文章,真正适用的没有几个. 索性自己搞一个吧. 开始本节的php教程 吧,以下代码的实现,主要做到可以很好区分一个get_code(),另一个create_ch ...
随机推荐
- 解决微信小程序的wx-charts插件tab切换时的显示会出现位置移动问题-tab切换时,图表显示错乱-实现滑动tab
解决Echarts在微信小程序tab切换时的显示会出现位置移动问题 tab切换时,图表显示错乱 <canvas class="kcanvas" canvas-id=" ...
- 在Java里>、>>、>>>的含义
在java中: >表示大于,如:if(a>b)...结果是boolean类型 >>表示右移,如:int i=15; i>>2的结果是3,移出的部分将被抛弃. 转为二 ...
- 使用 SharpZipLib 打包数据到 ZIP 文件
SharpZipLib 是一个优秀的开源的第三方压缩库,可以通过这个库将一些导出的文件打包到一个 ZIP 文件当中供用户下载. GitHub 地址:https://github.com/icsharp ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- webstorm基础使用
因为需要用到sass自动编译,从sublime转到了webstorm.现在自我感觉sublime需要的插件太多,而webstorm很多功能都帮你及成,不需要你去找插件和安装插件. webstorm的好 ...
- 用javascript写原生ajax(笔记)
AJAX 的全名叫做 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并 ...
- ZooKeeper系列(1):安装搭建ZooKeeper环境
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...
- 解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3
前言 新年好,本篇开始进入第三章,<对象和类型>,深刻理解C#的对象,对于使用好.Net类库非常重要. 01 类和结构 从使用角度看,结构和类的区别很小,比如,将结构定义转换为类,只需要将 ...
- Multi-Model多模数据库引擎设计与实现
如今,随着业务“互联网化”和“智能化”的发展以及架构 “微服务”和“云化”的发展,应用系统对数据的存储管理提出了新的标准和要求,数据的多样性成为了数据库平台面临的一大挑战,数据库领域也催生了一种新的主 ...
- Python爬虫之诗歌接龙
介绍 本文将展示如何利用Python爬虫来实现诗歌接龙. 该项目的思路如下: 利用爬虫爬取诗歌,制作诗歌语料库: 将诗歌分句,形成字典:键(key)为该句首字的拼音,值(value)为该拼音对 ...