用 Deepseek 写的 html+js 密码生成器

下面是一个功能完整的密码生成器HTML+JS实现,包含数字、小写字母、大写字母、符号、避免重复字符和密码长度设置功能。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>密码生成器</title><style>body {font-family: Arial, sans-serif;max-width: 600px;margin: 0 auto;padding: 20px;background-color: #f5f5f5;}.container {background-color: white;padding: 20px;border-radius: 8px;box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);}h1 {text-align: center;color: #333;}.form-group {margin-bottom: 15px;}label {display: block;margin-bottom: 5px;font-weight: bold;}input[type="range"] {width: 100%;}.output {display: flex;margin-top: 20px;}#password {flex-grow: 1;padding: 10px;font-size: 16px;border: 1px solid #ddd;border-radius: 4px 0 0 4px;}button {padding: 10px 15px;background-color: #4CAF50;color: white;border: none;border-radius: 0 4px 4px 0;cursor: pointer;font-size: 16px;}button:hover {background-color: #45a049;}.length-value {display: inline-block;width: 30px;text-align: center;}.strength-meter {height: 5px;background-color: #ddd;margin-top: 10px;border-radius: 5px;overflow: hidden;}.strength-bar {height: 100%;width: 0%;transition: width 0.3s, background-color 0.3s;}</style>
</head>
<body><div class="container"><h1>密码生成器</h1><div class="form-group"><label for="length">密码长度: <span id="lengthValue" class="length-value">12</span></label><input type="range" id="length" min="4" max="64" value="12"></div><div class="form-group"><label><input type="checkbox" id="lowercase" checked> 小写字母 (a-z)</label></div><div class="form-group"><label><input type="checkbox" id="uppercase" checked> 大写字母 (A-Z)</label></div><div class="form-group"><label><input type="checkbox" id="numbers" checked> 数字 (0-9)</label></div><div class="form-group"><label><input type="checkbox" id="symbols" checked> 符号 (!@#$%^&*等)</label></div><div class="form-group"><label><input type="checkbox" id="noRepeat"> 避免重复字符</label></div><div class="form-group"><label>密码强度:</label><div class="strength-meter"><div class="strength-bar" id="strengthBar"></div></div></div><div class="output"><input type="text" id="password" readonly><button id="generate">生成</button></div><div class="form-group" style="margin-top: 20px;"><button id="copy" style="width: 100%; border-radius: 4px;">复制密码</button></div></div><script>document.addEventListener('DOMContentLoaded', function() {// 获取DOM元素const lengthSlider = document.getElementById('length');const lengthValue = document.getElementById('lengthValue');const lowercaseCheckbox = document.getElementById('lowercase');const uppercaseCheckbox = document.getElementById('uppercase');const numbersCheckbox = document.getElementById('numbers');const symbolsCheckbox = document.getElementById('symbols');const noRepeatCheckbox = document.getElementById('noRepeat');const generateBtn = document.getElementById('generate');const passwordField = document.getElementById('password');const copyBtn = document.getElementById('copy');const strengthBar = document.getElementById('strengthBar');// 字符集const lowercaseChars = 'abcdefghijklmnopqrstuvwxyz';const uppercaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';const numberChars = '0123456789';const symbolChars = '!@#$%^&*()_+~`|}{[]\\:;?><,./-=';// 更新长度显示lengthSlider.addEventListener('input', function() {lengthValue.textContent = this.value;});// 生成密码generateBtn.addEventListener('click', generatePassword);// 复制密码copyBtn.addEventListener('click', function() {if (passwordField.value) {passwordField.select();document.execCommand('copy');copyBtn.textContent = '已复制!';setTimeout(() => {copyBtn.textContent = '复制密码';}, 2000);}});// 初始生成一个密码generatePassword();function generatePassword() {// 获取选项const length = parseInt(lengthSlider.value);const includeLower = lowercaseCheckbox.checked;const includeUpper = uppercaseCheckbox.checked;const includeNumbers = numbersCheckbox.checked;const includeSymbols = symbolsCheckbox.checked;const noRepeat = noRepeatCheckbox.checked;// 验证至少选择了一个字符集if (!includeLower && !includeUpper && !includeNumbers && !includeSymbols) {alert('请至少选择一种字符类型!');return;}// 构建可用字符集let chars = '';if (includeLower) chars += lowercaseChars;if (includeUpper) chars += uppercaseChars;if (includeNumbers) chars += numberChars;if (includeSymbols) chars += symbolChars;let password = '';if (noRepeat) {// 避免重复字符的模式if (length > chars.length) {alert(`避免重复字符模式下,密码长度不能超过可用字符数 (${chars.length})`);return;}// 将字符集转换为数组并打乱顺序const charsArray = chars.split('');shuffleArray(charsArray);// 选取前length个字符password = charsArray.slice(0, length).join('');} else {// 普通模式,允许重复字符for (let i = 0; i < length; i++) {const randomIndex = Math.floor(Math.random() * chars.length);password += chars[randomIndex];}}// 显示密码passwordField.value = password;// 更新强度条updateStrengthBar(password);}// 打乱数组顺序 (Fisher-Yates算法)function shuffleArray(array) {for (let i = array.length - 1; i > 0; i--) {const j = Math.floor(Math.random() * (i + 1));[array[i], array[j]] = [array[j], array[i]];}return array;}// 更新密码强度条function updateStrengthBar(password) {let strength = 0;// 长度评分if (password.length >= 12) strength += 2;else if (password.length >= 8) strength += 1;// 字符种类评分const hasLower = /[a-z]/.test(password);const hasUpper = /[A-Z]/.test(password);const hasNumber = /[0-9]/.test(password);const hasSymbol = /[^a-zA-Z0-9]/.test(password);const charTypes = [hasLower, hasUpper, hasNumber, hasSymbol].filter(Boolean).length;strength += charTypes - 1; // 每多一种类型加1分// 更新UIlet width = 0;let color = '#ff0000'; // 红色if (strength <= 1) {width = 25;color = '#ff0000'; // 弱 - 红色} else if (strength <= 3) {width = 50;color = '#ff9900'; // 中等 - 橙色} else if (strength <= 5) {width = 75;color = '#33cc33'; // 强 - 绿色} else {width = 100;color = '#009900'; // 非常强 - 深绿色}strengthBar.style.width = width + '%';strengthBar.style.backgroundColor = color;}});</script>
</body>
</html>

功能说明

这个密码生成器包含以下功能:

  1. 密码长度控制:通过滑块可以设置4到64位的密码长度

  2. 字符类型选择

    • 小写字母 (a-z)

    • 大写字母 (A-Z)

    • 数字 (0-9)

    • 符号 (!@#$%^&*等)

  3. 避免重复字符:勾选后生成的密码不会包含重复字符

  4. 密码强度指示:根据密码长度和使用的字符类型显示强度条

  5. 一键复制:方便复制生成的密码

  6. 响应式设计:适配不同屏幕尺寸

使用方法

  1. 调整滑块设置密码长度

  2. 选择需要的字符类型(至少选择一种)

  3. 如需避免重复字符,勾选相应选项

  4. 点击"生成"按钮创建密码

  5. 点击"复制密码"按钮将密码复制到剪贴板

您可以根据需要进一步自定义样式或添加更多功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF绑定

如何使用绑定去改变事件驱动的关系。 先介绍一下标签扩展 目录 控件与控件之间的绑定 代码分析 绑定语法详解 1. Binding - 绑定标记 2. ElementName=slider - 绑定源 3. Path=Value - 绑定路径 不同控件属性的默认模式: 控件和属性绑定 1. 数据模型类的作用 2. 窗…

同源“平滑思想”的问题解法:正则化与拉普拉斯平滑

同源“平滑思想”的问题解法&#xff1a;正则化与拉普拉斯平滑 在机器学习和概率模型的实践中&#xff0c;正则化与拉普拉斯平滑是两个看似无关的技术&#xff1a;前者用于防止模型过拟合&#xff0c;后者用于解决零概率问题。但如果深入理解它们的核心逻辑&#xff0c;会发现…

用 AI 让学习更懂你:如何打造自动化个性化学习系统?

用 AI 让学习更懂你:如何打造自动化个性化学习系统? 在这个信息爆炸的时代,传统的学习方式已经难以满足个体化需求。过去,我们依赖固定的教学课程,所有学生按照统一进度进行学习,但每个人的学习节奏、兴趣点和理解方式都不尽相同。而人工智能(AI)正在彻底改变这一局面…

PyQt学习系列08-插件系统与模块化开发

PyQt学习系列笔记&#xff08;Python Qt框架&#xff09; 第八课&#xff1a;插件系统与模块化开发 &#xff08;原课程规划中的第12课&#xff0c;按用户要求调整为第9课&#xff09; 课程目标 掌握Qt插件系统的原理与开发方法实现可扩展的模块化应用程序理解QPluginLoader动…

rlemasklib 安装笔记

目录 windows 安装&#xff0c;没成功 报错笔记&#xff1a; windows 安装&#xff0c;没成功 anslation_unit.obj -Wno-cpp -Wno-unused-function -stdc99 -O3 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” error: command C:\\Program Files\\Microso…

Ubuntu 系统grub日志级别设置

在 Ubuntu 系统中&#xff0c;GRUB 的日志级别主要与内核日志级别&#xff08;loglevel&#xff09;相关&#xff0c;而不是 GRUB 自身的日志级别。内核日志级别通常从 0 到 7&#xff0c;其中 0 是最高级别&#xff08;最严重&#xff09;&#xff0c;7 是最低级别&#xff08…

【前端】使用HTTPS

在前端本地开发环境中使用 HTTPS 主要取决于你用的是哪个构建工具&#xff08;如 Vite、Webpack、Vue CLI 等&#xff09;。 目录 ViteWebpack本地生产环境 npx serve浏览器提示“不安全”解决方法上传github注意不要把key传上去 Vite npm install --save-dev types/node #安…

Python 包管理工具 uv的一些常用指令

1.如何安装uv&#xff1a; 在Windows下&#xff0c;执行下面的指令&#xff1a; powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 安装很快&#xff0c;安装完成后&#xff0c;会出现&#xff1a; 接着&#xff0c;我们运行指…

行为型:策略模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、优化技巧 1、核心思想 目的&#xff1a;将算法&#xff08;行为&#xff09;抽象出来作为一系列策略类&#xff0c;使他们可以相互替换&#xff0c;使系统拥有“可插拔”扩展的能…

计算机网络学习20250524

协议 格式—语法&#xff1a;数据结构或格式&#xff08;怎么做&#xff09;次序—时序&#xff1a;事件实现的顺序&#xff08;做的顺序&#xff09;行为动作—语义&#xff1a;发出什么控制信息&#xff0c;完成何种动作、做出何种应答 网络结构 网络边缘&#xff1a;主机…

Github 2025-05-24 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2Dart项目1Tauri: 构建小型、快速和安全的桌面应用程序 创建周期:1673 天开发语言:Rust协议类型:Apache License 2…

数据结构之堆(topk问题、堆排序)

一、堆的初步认识 堆虽然是用数组存储数据的数据结构&#xff0c;但是它的底层却是另一种表现形式。 堆分为大堆和小堆&#xff0c;大堆是所有父亲大于孩子&#xff0c;小堆是所有孩子大于父亲。 通过分析我们能得出父子关系的计算公式&#xff0c;parent(child-1)/2&#xff…

0基础 Git 代码操作

将代码提交仓库&#xff1a; 准备工作​ ​注册 Gitee 账号​&#xff1a;确保你已注册并登录 Gitee。​创建仓库​&#xff1a;在 Gitee 上新建一个空仓库&#xff08;如果尚未创建&#xff09;&#xff1a; 点击右上角 → 新建仓库。填写仓库名称、描述&#xff0c;选择公…

OpenAI大模型不听人类指令事件的技术分析与安全影响

OpenAI大模型不听人类指令事件的技术分析与安全影响 OpenAI大模型o3确实存在不遵从人类关闭指令的现象&#xff0c;这一行为已被第三方安全机构验证&#xff0c;但其本质是技术缺陷而非AI意识觉醒。帕利塞德研究所的测试显示&#xff0c;在100次实验中o3有7次成功绕过关闭指令…

软件工程期末速成--附带几道题

软件工程中的各种设计 瀑布模型&#xff1a; 定义&#xff1a;将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作&#xff0c;形如瀑布流水&#xff0c;最终得到软件产品 系统流程图&#xff1a;系统流程图是描绘物理系统的传统工具&#xff0c;它的基本思想是用…

免费分享50本web全栈学习电子书

最近搞到一套非常不错的 Web 全栈电子书合集&#xff0c;整整 50 本&#xff0c;都是epub电子书格式&#xff0c;相当赞&#xff01;作为一个被期末大作业和项目 ddl 追着跑的大学生&#xff0c;这套书真的救我狗命&#xff01; 刚接触 Web 开发的时候&#xff0c;我天天对着空…

嵌入式学习笔记——day26

文件操作&#xff08;续&#xff09;目录操作 一、文件操作 1. lseek lseek 是一个用于在文件中移动文件指针的系统调用&#xff0c;通常用于在文件描述符所指向的文件中定位读取或写入的位置。它允许程序在文件中随机访问数据&#xff0c;而不是只能顺序读取或写入。 off_t …

LINUX安装运行jeelowcode前端项目

参考 JeeLowCode低代码社区,JeeLowCode低代码开发平台,JeeLowCode低代码开发框架,快速启动&#xff08;VUE&#xff09; 安装node 18 LINUX安装node/nodejs_linux安装node 安装到哪-CSDN博客 安装PNPM LINUX安装PNPM-CSDN博客 下载 git clone https://gitcode.com/jeelo…

【Redis】基本架构

1. 单线程模型 现在开启了三个redis-cli客户端同时执行命令。 客户端1设置一个字符串键值对&#xff1a; 127.0.0.1:6379> set hello world客户端2对counter做自增操作&#xff1a; 127.0.0.1:6379> incr counter客户端3对counter做自增操作&#xff1a; 127.0.0.1:…

[yolov11改进系列]基于yolov11的修改检测头为自适应特征融合模块为ASFFHead检测头的python源码+训练源码

【自适应空间特征融合模块ASFF介绍】 ASFF&#xff08;Adaptive Spatial Feature Fusion&#xff09;是一种自适应特征融合策略&#xff0c;旨在解决目标检测中不同尺度特征之间的冲突和不一致性。 ‌ 基本概念和原理 ASFF通过学习每个尺度特征的自适应融合权重&#xff0c…