周五,快下班了,正收拾东西准备走人,项目经理突然让我给他做个Excel,1000个数字加字母组合的密码,不重复,下班前给。

我直接懵了,Excel不会,估计是要写个什么命令才能生成出来,于是想着有没有什么软件可以生成,找了一会儿还是放弃了。等着下班回家呢,自己来吧。

废话少说,上代码。

    <div id="keys"></div>
<script>
// 生成十位字母加数字随机数
var arr = [];
for (var i=0;i<1000;i++) {
var n = Math.random().toString(36).substr(2,10);
arr.push(n);
}
// 去重
var ukeys = [];
for (var i = 0; i < arr.length; i++) {
if (ukeys.indexOf(arr[i]) == -1) {
console.log(arr[i])
ukeys.push(arr[i]);
}
}
// 数组处理,便于在Html文档中显示
var keys = '';
for (var i=0;i<ukeys.length;i++) {
ukeys[i] += '<br>'
keys += ukeys[i]
}
$('#keys').html(keys);
console.log('去重后的密码个数:' + ukeys.length);
</script>

Math.random()    输出0到1(包括0,不包含1)的随机数。
toString(16)        将随机数转换为16进制的字符串。
substring(2, 10)  截取字符串,因为随机数大于等于0小于1,前两位是 " 0. " , substring(2, 10)从第三位开始截取十位。

去重。检查数组中的每一个元素,如果当前元素在新的数组中已经存在则忽略,否则加入倒新数组中。最后得到的新数组就是所要的不重复的密码。

至此已经得到了1000个数字加字母组合的密码,而且不重复,但是由于要拷贝到excel中,如果直接在控制台中打印然后复制,结果是这样的:

randomCode.html:23   ud6202zt55
randomCode.html:23   oqu89g76tu
randomCode.html:23   m5cibg4jv1

因此需要对结果进行格式化以方便复制,如下:

即在每一项元素后面添加一个换行标签<br>, 然后在页面中显示出来,效果如下:

然后全选粘贴到Excel就ok啦。

小结:生成密钥数组主要用到了JS的 Math.random() 、toString(36)、substr(start, n)方法,关键在于数值转换成16进制字符串的过程。

数组去重主要用到了 indexOf() 方法。数组去重是个十分经典的问题,方法很多,个人认为使用indexOf()逐项排除是最简单的,其他的方法有时间也需要研究一下。

整个过程的代码还是十分简单和基础的,照这样的方法,只要系统承受得了,生成十万个一百万个数十位不重复的密钥也是没有任何问题的。

JS生成1000个数字加字母的不重复的随机字符串的更多相关文章

  1. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  2. js正则表达式只能是数字、字母或下划线

    //只能是数字.字母或下划线 function isValid(str) { var reg = /^\w+$/g; return reg.test(str); }

  3. PHP 验证5-20位数字加字母的正则(数字和字母缺一不可)!!!

    $pattern = '/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{5,20}$/'; if(!preg_match($pattern,$username)){ re ...

  4. php随机生成数字加字母的字符串

    function getRandomString($len, $chars=null) { if (is_null($chars)) { $chars = "ABCDEFGHIJKLMNOP ...

  5. C++ 随机数字以及随机数字加字母生成

    #include <time.h>#include <sys/timeb.h>void MainWindow::slot_clicked(){ QString strRand; ...

  6. js 正则表达式:密码必须由6-12位数字加字母组成

    ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$

  7. jq随机生成数字加字母的字符串

    html代码: <dl class="row"> <dt class="tit"> <label for="title& ...

  8. 【vue】canvas验证码组件--数字/数字加字母

    基于canvas的数字/数字+字符验证码   SIdentify.vue 组件 <!-- 基于canvas的数字/数字+字符验证码 --> <!-- 调用格式 <s-ident ...

  9. python识别验证码——一般的数字加字母验证码识别

    1.验证码的识别是有针对性的,不同的系统.应用的验证码区别有大有小,只要处理好图片,利用好pytesseract,一般的验证码都可以识别 2.我在识别验证码的路上走了很多弯路,重点应该放在怎么把图片处 ...

随机推荐

  1. 【Android UI】:Fragment官方文档

    概述   Fragment表现Activity中UI的一个行为或者一部分.可以将多个fragment组合在一起,放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity ...

  2. 成功转移安卓手机QQ聊天记录

    废话先不说,直接上干货: 只要把两个地方的数据完整的复制到新手机对应位置就可以了,但过程相当坎坷: /data/data/com.tencent.mobileqq /sdcard/Tencent/Mo ...

  3. javascript练习-私有状态

    在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的方法才能访问这些状态,对外只暴露一些重要的状态可以直接编写.这是就需要私有状态. function Range(fro ...

  4. Struts2基础

    访问ServletApi (1)用ActionConten访问Api, ActionContent.getContext().getSession().put("user",&qu ...

  5. NSDate

    NSDate : NSDate *date = [NSDate date];获取当前日期 NSDate 可以进行比较,通过earlierDate:方法获取二个日期中最早的. NSDate 通过late ...

  6. Struts2中获取servlet API的几种方式

    struts2是一个全新的MVC框架,如今被广大的企业和开发者所使用,它的功能非常强大.这给我们在使用servlet 纯java代码写项目的时候带来了福音.但是一般来说,我们的项目不到一定规模并不需要 ...

  7. EventBus的简单使用与原理

    一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...

  8. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  9. c#判断是否为合法的email地址

    题目要求: class Program { static void Main(string[] args) { Console.WriteLine("请输入正确的邮箱地址,以 @sina.c ...

  10. Java开发视频网站大概需要多少钱?

    这个还真不好说,需要看你对视频网站有什么要求?你的数据库选择的是什么型号的?需要开发几个页面?服务器是需要高端的还是中低端的?还有你对完成时间有什么要求,这些细节也是决定价格的关键因素. 上面这些因素 ...