【晚风摇叶之随机密码生成器】随机生成密码
需求:想要生成位数不低于16的随机密码,而且要包含大小写字母,数字,特殊字符四类
用别人的在线生成器,生成的密码有个别没有数字或者特殊字符,验证方式就是,生成几个长度是4的密码,看一下生成的密码是否都包含这四类
自己简单写了一个js版和java版的
特点1:保证每个密码都包含四类,实现方式:先随机生成这四类各一个字符,比如aA1*,然后放到随机的位置上去,最后给剩余的位置随机取一个字符。
特点2:设置黑名单字符,有的字体或者软件上显示大写i和小写L分不清,如Il,把这两个排除,1可能也会分不清,也可以修改源码加上黑名单。
特点3:四种类型的字符出现的概率一样
js源码如下:
<html>
<head>
</head>
<body>
<div id="data">
</div>
</body>
<script>
function getRandom(start,end){// 随机数[start,end)return parseInt(Math.random()*(end-start)+start);
}
function getRandomWithout(start,end,without){// 随机数[start,end) TODO var r = parseInt(Math.random()*(end-start)+start);if(without.includes(r)){return getRandomWithout(start,end,without);}return r;
}var special = ['$','%','*','+','-',',','.','[',']'];
var blacklist = ['I','l'];
// a-z:97-122 A-Z:65-90 数字:48-57 特殊符号:
function getLetterLow(blacklist){var v = String.fromCharCode(getRandom(97,123));if(blacklist.includes(v)){return getLetterLow(blacklist);}return v;
}
function getLetterUp(blacklist){var v = String.fromCharCode(getRandom(65,91));if(blacklist.includes(v)){return getLetterUp(blacklist);}return v;
}
function getNumber(blacklist){var v = String.fromCharCode(getRandom(48,58));if(blacklist.includes(v)){return getNumber(blacklist);}return v;
}
function getSpecial(blacklist){var v = special[getRandom(0,special.length)];if(blacklist.includes(v)){return getSpecial(blacklist);}return v;
}var length = 16;
var count = 100;
for(var i=0;i<count;i++){var pwd = new Array(length);var r_index = new Array(4); // 随机的位置var r_index_index = 0;var r_index_data = new Object(); // 随机的位置上的数据// 随机一个小写字母,并到随机位置var r1 = getLetterLow(blacklist);var r1_index = getRandom(0,length);r_index[r_index_index] = r1_index;r_index_index++;r_index_data[r1_index] = r1;// 随机一个大写字母,并到随机位置var r2 = getLetterUp(blacklist);var r2_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r2_index;r_index_index++;r_index_data[r2_index] = r2;// 随机一个数字,并到随机位置var r3 = getNumber(blacklist);var r3_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r3_index;r_index_index++;r_index_data[r3_index] = r3;// 随机一个特殊字符,并到随机位置var r4 = getSpecial(blacklist);var r4_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r4_index;r_index_index++;r_index_data[r4_index] = r4;for(var j=0;j<length;j++){if(r_index.includes(j)){pwd[j] = r_index_data[j];}else{var type = getRandom(1,5);var data = '0';if(type==1){data = getLetterLow(blacklist);}else if(type==2){data = getLetterUp(blacklist);}else if(type==3){data = getNumber(blacklist);}else if(type==4){data = getSpecial(blacklist);}pwd[j] = data;}}var data = document.getElementById("data");var p=document.createElement("span");p.innerHTML=pwd.join('');data.appendChild(p);data.appendChild(document.createElement("br"));
}</script>
</html>
java代码如下:
package com.kingdee.eas.myutil;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class RandomPasswordUtil {private static final char[] LetterLow = { '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' };private static final char[] LetterUP = { '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' };private static final char[] Number = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };private static char[] Special = { '!', '#', '$', '%', '*', '+', '-', ',', '.', '?', '[', ']' };private static List<String> BlackList = new ArrayList<String>();public static List<String> getRandomPassword(int count, int length) {BlackList.add("I");BlackList.add("l");List<String> list = new ArrayList<String>();for (int i = 0; i < count; i++) {char[] pwd = new char[length];List<Integer> index = new ArrayList<Integer>();Map<Integer, Character> r_index_data = new HashMap<Integer, Character>();// 随机一个小写字母,并到随机位置char r1 = getLetterLow(BlackList); // 数据int r1_index = getRandom(0, length); // 位置index.add(r1_index);r_index_data.put(r1_index, r1);// 随机一个大写字母,并到随机位置char r2 = getLetterUp(BlackList); // 数据int r2_index = getRandomWithout(0, length, index);// 位置index.add(r2_index);r_index_data.put(r2_index, r2);// 随机一个数字,并到随机位置char r3 = getNumber(BlackList); // 数据int r3_index = getRandomWithout(0, length, index);// 位置index.add(r3_index);r_index_data.put(r3_index, r3);// 随机一个特殊字符,并到随机位置char r4 = getSpecial(BlackList); // 数据int r4_index = getRandomWithout(0, length, index);// 位置index.add(r4_index);r_index_data.put(r4_index, r4);for (int j = 0; j < length; j++) {if (r_index_data.containsKey(j)) {pwd[j] = r_index_data.get(j);} else {int type = getRandom(1, 5);char data = '0';if (type == 1) {data = getLetterLow(BlackList);} else if (type == 2) {data = getLetterUp(BlackList);} else if (type == 3) {data = getNumber(BlackList);} else if (type == 4) {data = getSpecial(BlackList);}pwd[j] = data;}}list.add(String.valueOf(pwd));}return list;}private static char getLetterLow(List<String> blacklist) {char v = LetterLow[getRandom(0, LetterLow.length)];if (blacklist.contains(v)) {return getLetterLow(blacklist);}return v;}private static char getLetterUp(List<String> blacklist) {char v = LetterUP[getRandom(0, LetterUP.length)];if (blacklist.contains(v)) {return getLetterUp(blacklist);}return v;}private static char getNumber(List<String> blacklist) {char v = Number[getRandom(0, Number.length)];if (blacklist.contains(v)) {return getNumber(blacklist);}return v;}private static char getSpecial(List<String> blacklist) {char v = Special[getRandom(0, Special.length)];if (blacklist.contains(v)) {return getSpecial(blacklist);}return v;}private static int getRandom(int start, int end) {return (int) (Math.random() * (end - start) + start);}private static int getRandomWithout(int start, int end, List<Integer> without) {int r = (int) (Math.random() * (end - start) + start);if (without.contains(r)) {return getRandomWithout(start, end, without);}return r;}public static void main(String[] args) {List<String> list = getRandomPassword(100, 4);for (String s : list) {System.out.println(s);}}
}
相关文章:
【晚风摇叶之随机密码生成器】随机生成密码
需求:想要生成位数不低于16的随机密码,而且要包含大小写字母,数字,特殊字符四类 用别人的在线生成器,生成的密码有个别没有数字或者特殊字符,验证方式就是,生成几个长度是4的密码,看…...
Spring Cache
什么是Spring Cache? Spring Cache是Spring框架的一个模块,它提供了对应用程序方法级别的缓存支持。通过使用Spring Cache,您可以在方法的结果被计算后,将其缓存起来,从而避免相同输入导致的重复计算。 Spring Cache…...

em3288 linux_4.19 sd卡调试
默认配置,根据实际配置即可。...
前端vue uni-app cc-countdown倒计时组件
随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高。在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一发而动全身的情况。为了解决这个问题,我们采用了组件化的开发模式。通过组…...

fifo读写的数据个数
fifo IP核设置读写个数 如果不勾选精确值,则统计的当前写入和待读出的数据为估计值,可能会相差2个左右。且fifo设计的wr_data_count. wr_data_count:当前的fifo中剩余已经写入的数据。 rd_data_count:当前的fifo中剩余可以读出…...

Java之Map接口
文章目录 简述Map中key-value特点 Map接口的常用方法Map的主要实现类:HashMapHashMap概述 Map实现类之二:LinkedHashMapMap实现类之三:TreeMapMap实现类之四:Hashtable(古老实现类)Map实现类之五࿱…...
windows系统中的命令行可以用python,pip等命令(已在系统中添加过python环境变量),但是pycharm的terminal中无法使用。
如果你已经在Windows系统中添加了Python环境变量,那么在命令行中使用python和pip命令应该是没有问题的。但是在PyCharm的Terminal中无法使用这些命令,可能是因为PyCharm的Terminal使用的是自己的虚拟环境,而不是系统环境。 你可以尝试在PyCh…...
编译 OneFlow 模型
本篇文章译自英文文档 Compile OneFlow Models tvm 0.14.dev0 documentation 作者是 BBuf (Xiaoyu Zhang) GitHub 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本文介…...

【kubernetes】k8s单master集群环境搭建及kuboard部署
k8s入门学习环境搭建 学习于许大仙: https://www.yuque.com/fairy-era k8s官网 https://kubernetes.io/ kuboard官网 https://kuboard.cn/ 基于k8s 1.21.10版本 前置环境准备 一主两从,三台虚拟机 CPU内存硬盘角色主机名IPhostname操作系统4C16G50Gmasterk8s-mast…...

0802|IO进程线程 day5 进程概念
一、进程的基础 1.1 什么是进程 1)进程是程序的一次执行过程 程序:是静态的,它是存储在外存上的可执行二进制文件;进程:动态的概念,它是程序的一次执行过程,包括了进程的创建,调度、…...

4 Promethues监控主机和容器
目录 目录 1. 监控节点 1.1 安装Node exporter 解压包 拷贝至目标目录 查看版本 1.2 配置Node exporter 1.3 配置textfile收集器 1.4 启动systemd收集器 1.5 基于Docker节点启动node_exporter 1.6 抓取Node Exporter 1.7 过滤收集器 2. 监控Docker容器 2.1 运行cAdviso…...

亚马逊买家账号ip关联怎么处理
对于亚马逊买家账号,同样需要注意IP关联问题。在亚马逊的眼中,如果多个买家账号共享相同的IP地址,可能会被视为潜在的操纵、违规或滥用行为。这种情况可能导致账号受到限制或处罚。 处理亚马逊买家账号IP关联问题,建议采取以下步骤…...

NO4 实验四:生成Web工程
1、说明 使用 mvn archetype:generate 命令生成 Web 工程时,需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法: 2、操作 注意:如果在上一个工程的目录下执行 mvn archetype&…...

【linux】进程
文章目录 前言一、概念基本概念进程-PCBtask_structtask_struct内容分类 二、查看和创建进程查看进程PID创建进程 三、进程状态五、僵尸进程和孤儿进程僵尸进程孤儿进程获取进程退出码 四、进程优先级基本概念查看系统进程PRI and NI用top命令更改已存在进程的nice 前言 我们常…...

电商高并发设计之SpringBoot整合Redis实现布隆过滤器
文章目录 问题背景前言布隆过滤器原理使用场景基础中间件搭建如何实现布隆过滤器引入依赖注入RedisTemplate布隆过滤器核心代码Redis操作布隆过滤器验证 总结 问题背景 研究布隆过滤器的实现方式以及使用场景 前言 本篇的代码都是参考SpringBootRedis布隆过滤器防恶意流量击穿缓…...
SpringBoot第25讲:SpringBoot集成MySQL - MyBatis 注解方式
SpringBoot第25讲:SpringBoot集成MySQL - MyBatis 注解方式 本文是SpringBoot第25讲,上文主要介绍了Spring集成MyBatis访问MySQL,采用的是XML配置方式;我们知道除了XML配置方式,MyBatis还支持注解方式。本文主要介绍Sp…...

服务器返回 413 Request Entity Too Large
问题 上传一个大于1.5M的文件时,报错:413 Request Entity Too Large 使用的配置 1、用的是docker环境,还有一层代理,代理用的镜像是:jwilder/nginx-proxy 2、docker里是有php和nginx 确认配置 docker里的php和ngi…...

如何一目了然地监控远程 Linux 系统
动动发财的小手,点个赞吧! Glances 是一款免费的开源、现代、跨平台、实时 top 和类似 htop 的系统监控工具,与同类工具相比,它提供了先进的功能,并且可以在不同的模式下运行:作为独立模式、客户端/服务器模…...

9.环境对象和回调函数
9.1环境对象 指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境 作用: 弄清楚this的指向,可以让我们代码更简洁 ➢函数的调用方式不同,this指代的对象也不同 ➢[谁调用,this 就指代谁] 是判断this指向的…...
51单片机(普中HC6800-EM3 V3.0)实验例程软件分析概览
本专栏将分析普中HC6800-EM3 V3.0 (9.22)\5--实验程序\基础实验例程中的各个例程的代码。 引言:本专栏将对历程中的关键代码进行分析与拓展,再学习一遍51,记录与各位一起进步。 下面是文件列表: E:\USER\000study\000_51单片机\000普中HC6800-EM3 V3.0 (9.22)\5--实…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...