15.5 【TS基础项目】构建随机密码生成器

article/2025/8/13 13:48:13

在现代 Web 应用中,生成强大而安全的密码对于保护用户账户免受未经授权访问至关重要。使用 TypeScript 构建一个随机密码生成器,可以通过混合字母、数字和特殊字符来创建不可预测、复杂的密码,从而显著提升安全性。

我们要构建什么?

本项目旨在创建一个随机密码生成器应用,其功能包括:

  • 根据用户指定的长度生成随机密码;
  • 支持包含大写字母、小写字母、数字和特殊字符;
  • 用户可自定义密码的复杂度与长度;
  • 将生成的密码显示在界面上,方便一键复制。

项目预览

这是一个简洁实用的随机密码生成器页面。用户可以指定密码长度,并点击按钮生成符合要求的密码。

HTML 与 CSS 设置

下面是该应用的 HTML 与 CSS 代码,包含了结构与样式,表单允许用户输入所需密码长度并生成密码:

HTML + CSS 示例代码

<html><head><style>body {font-family: Arial, sans-serif;background-color: #f4f7fc;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {text-align: center;padding: 20px;border: 2px solid #ddd;border-radius: 10px;background-color: #fff;width: 300px;box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);}h1 {color: #333;}label {font-size: 16px;}input[type="number"] {width: 80px;padding: 5px;margin: 10px;border-radius: 4px;border: 1px solid #ccc;}button {padding: 10px 20px;background-color: #4caf50;color: white;border: none;border-radius: 4px;cursor: pointer;font-size: 16px;}button:hover {background-color: #45a049;}.password-display input {margin-top: 20px;padding: 10px;width: 80%;font-size: 18px;border-radius: 4px;border: 1px solid #ccc;background-color: #f9f9f9;text-align: center;}</style></head><body><div class="container"><h1>Random Password Generator</h1><label for="passwordLength">Password Length:</label><input type="number" id="passwordLength" value="12" min="8" max="20" /><button id="generateButton">Generate Password</button><div class="password-display"><input type="text" id="password" readonly /></div></div></body>
</html>

说明:

  • HTML 创建了一个表单,包含输入框(指定密码长度)和按钮(生成密码)。
  • CSS 样式设计简洁,包含边框圆角、阴影与响应式居中布局。
  • 用户可设置密码长度(最短 8,最长 20)。
  • 生成的密码会显示在一个只读的输入框中,方便复制。

TypeScript 逻辑

下面的 TypeScript 代码负责密码的生成逻辑,结合用户输入的长度,输出包含多种字符的强密码,并将其显示在输入框中:

TypeScript 示例代码

// 生成指定长度的随机密码
function pass(length: number = 12): string {const char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_-+=";let password = "";for (let i = 0; i < length; i++) {const ind = Math.floor(Math.random() * char.length);password += char[ind];}return password;
}// 获取按钮、输入框等 DOM 元素
const btn = document.getElementById("generateButton") as HTMLButtonElement;
const inp = document.getElementById("password") as HTMLInputElement;
const passLen = document.getElementById("passwordLength") as HTMLInputElement;// 点击按钮时生成密码
btn.addEventListener("click", () => {let length = parseInt(passLen.value, 10);if (length < 8) length = 8;if (length > 20) length = 20;const password = pass(length);inp.value = password;
});

功能说明:

  • pass 函数根据给定长度生成密码,字符集包含大小写英文字母、数字及特殊字符;
  • generateButton 按钮用于触发密码生成;
  • passwordLength 输入框接收用户的密码长度设置;
  • 密码长度被限制在 8~20 之间;
  • 最终密码会显示在 password 输入框中。

转换为 JavaScript 文件

TypeScript 代码需通过命令行编译为 JavaScript,浏览器才能识别运行。使用以下命令:

npx tsc task.ts
# 或
tsc task.ts

默认情况下,编译后的 task.js 会和 task.ts 保存在同一目录中。

完整代码

这是最终可直接运行的完整 HTML 页面,已嵌入 JavaScript(由 TypeScript 编译而来):

<html><head><style>/* 同前略 */</style></head><body><div class="container"><h1>Random Password Generator</h1><label for="passwordLength">Password Length:</label><input type="number" id="passwordLength" value="12" min="8" max="20" /><button id="generateButton">Generate Password</button><div class="password-display"><input type="text" id="password" readonly /></div></div><script>function pass(length) {if (length === void 0) { length = 12; }var char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_-+=";var password = "";for (var i = 0; i < length; i++) {var ind = Math.floor(Math.random() * char.length);password += char[ind];}return password;}var btn = document.getElementById("generateButton");var inp = document.getElementById("password");var passLen = document.getElementById("passwordLength");btn.addEventListener("click", function () {var length = parseInt(passLen.value, 10);if (length < 8) length = 8;if (length > 20) length = 20;var password = pass(length);inp.value = password;});</script></body>
</html>

总结

本项目是 TypeScript 实践的一个绝佳入门项目,通过构建一个具备实际用途的密码生成器,你可以掌握 TypeScript 与 DOM 操作、输入验证、基本算法等多项技能,同时还能产出一个功能完备的小工具。


http://www.hkcw.cn/article/RCQeCBocqR.shtml

相关文章

上海一公交站椅子矮出新高度 乘客叫苦不迭

上海街头的许多公交车站都设有候车座椅,这些座椅成为老人们等车时的好帮手。然而,并不是每个公交站点都能让乘客感到舒心。家住共青森林公园附近的市民反映,该公园正门的公交102路、124路和147路站点的座椅高度异常低矮,甚至比幼儿园的板凳还要矮,导致乘客坐着不舒服,蹲下…

Angular应用中的ng-bootstrap-loading:优雅的页面加载蒙版实现

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;为了在Angular应用中增强用户体验&#xff0c;在数据加载时显示加载蒙版是必不可少的。"ng-bootstrap-loading"是一个基于Bootstrap框架的库&#xff0c;专门用于实现页面加载效果&#xff0c;尤其适…

前端学习+项目问题9

一般字体下载下来是.ttf格式&#xff0c;需要转换才能使用 字体转换网址 http://www.font2web.com//?errorno_file_uploaded https://www.fontsquirrel.com/tools/webfont-generator 转换需要上传字体&#xff0c;转换完成后会自动下载安装包&#xff0c;解压安装包&#…

四、Angular 服务与依赖注入

一、概述 Angular 为了解决数据共享和逻辑复用问题&#xff0c;引入了服务的概念&#xff0c;服务简单理解就是一个带有特性功能的类&#xff0c;Angular 提倡把与视图无关的逻辑抽取到服务中&#xff0c;这样可以让组件类更加精简、高效&#xff0c;组件的工作只管用户体验&am…

源码:Spring常规Bean创建过程

Bean创建过程&#xff1a; 一、版本 5.3.10二、学习内容 Bean创建过程源码三、Bean生命周期 时间轴地址&#xff1a;点击 四、bean创建过程脑图总结 脑图地址&#xff1a;点击 五、源码过程 说明&#xff1a; bean创建入口一般都是通过getBean(xxx);方法进入的&#xf…

用ENSP完成SSH登录实验(设备间登录),学起来学起来!!

最近才用到SSH的登录功能&#xff0c;简单的学习总结。大佬勿喷&#xff01;&#xff01;&#xff01; 用ENSP完成SSH登录实验&#xff08;设备间相互登录&#xff09;&#xff0c;学起来学起来&#xff01;&#xff01; 具体思路&#xff1a; 设备连线&#xff0c;启动。配…

调整图片和表格尺寸的命令:resizebox

\resizebox 是 LaTeX 中的一个命令&#xff0c;用于调整插入的内容&#xff08;如图像、表格、文本等&#xff09;的大小。它的语法如下&#xff1a; \resizebox{<width>}{<height>}{<content>}其中&#xff1a; <width> 和 <height> 分别表示…

Linux练级宝典->动态库和静态库

动静态库的原理 我们知道可执行文件前的4步骤 预编译->编译->汇编->链接 预处理&#xff1a; 完成头文件展开、去注释、宏替换、条件编译等&#xff0c;最终形成xxx.i文件。编译&#xff1a; 完成词法分析、语法分析、语义分析、符号汇总等&#xff0c;检查无误后将…

uniapp在自定义tabbar上动态修改svg图标颜色和字体颜色

需求:在uniapp项目内,自定义tabbar,需要将图标更换成svg格式,可动态修改图标及字体颜色。 效果图如下: 我使用的是uniapp结合uview2的组件使用,代码如下: <u-tabbar :value="currentIndex" @change="tabbarChange" :fixed="true" :a…

三、Angular 路由

一、简介 Angular 的路由服务是一个可选的服务&#xff0c;它用来呈现指定的 URL 所对应的视图。它并不是Angular 核心库的一部分&#xff0c;而是位于 angular/router 包中。像其他 Angular 包一样&#xff0c;路由服务在用户需要时才从此包中导入。 [1]. 创建路由模块 默认…

C语言——字符函数和字符串函数(二)

&#x1f4dd;前言&#xff1a; 上一篇文章C语言——字符函数和字符串函数&#xff08;一&#xff09;对字符函数和字符串函数strlen&#xff0c;strcpy和strncpy&#xff0c;strcat和strncat进行了初步的讲解 这篇文章主要再讲解几个我们常用到的其他字符串函数&#xff08;附…

【C语言字符函数和字符串函数(二)】--strcmp,strstr的使用和模拟实现,strncpy,strncat,strncmp函数的使用,strock,strerror函数的使用

目录 一.strcmp的使用和模拟实现 1.1--strcmp的使用演示 1.2--strcmp的模拟实现 二.strstr的使用和模拟实现 2.1--strstr的使用演示 2.2--strstr的模拟实现 三.strncpy函数的使用 3.1--strncpy的代码演示 3.2--strncpy的模拟实现 3.3--比较strcpy和strncpy函数 四.…

白玉兰奖综艺类别入围名单公布 奖项即将揭晓

第30届上海电视节白玉兰奖入围名单在综艺类别中已经公布,最终获奖结果将在6月27日的“白玉兰绽放”颁奖典礼上揭晓。责任编辑:zhangxiaohua

曝理想汽车计划打造家庭轿车 或对标保时捷Panamera

据多方消息,国内造车新势力领军企业理想汽车正计划进军家庭轿车市场,其首款轿车产品疑似对标知名豪华品牌保时捷的Panamera车型。在最近的一季度财报会上,理想汽车CEO李想透露了公司进入轿车市场的计划。他表示,在现有增程SUV和纯电MPV产品线的市场表现达到预期后,将根据市…

t002-在线装修管理系统的设计与实现

项目视频演示 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息…

vue3 各种数据处理

1.对数组去重, 并取出想要的值 用途&#xff1a;获取此数组中共有几个名字 方法&#xff1a;...new Map&#xff0c;map,values() 示例&#xff1a; let aar [{id: 1, name: name1, value: value1},{id: 1, name: name1, value: value2},{id: 2, name: name2, value: value…

广西瓜农因收购价低把西瓜扔进池塘 市场饱和致价格偏低

5月29日,广西扶绥县的瓜农因西瓜滞销和收购价低而面临困境。一些瓜农选择将西瓜扔进池塘或任其烂在地里。山圩镇的一名瓜农表示,今年西瓜的收购价仅为每斤两毛钱,远低于往年水平,预计自己将亏损四五万元,地里有约10万斤西瓜被丢弃。一位西瓜收购商指出,收购价确实较低,这…

德国真会向乌提供金牛座导弹吗 态度摇摆不定

德国总理默茨上任以来,在是否向乌克兰提供“金牛座”远程巡航导弹问题上的态度一直摇摆不定。他在26日参加活动时提到,英国、法国、德国和美国“已不再限制援助乌克兰武器的射程”,这一言论引发了外界关于德国是否已经批准向乌克兰提供“金牛座”导弹的各种猜测。路透社报道…

孙俪唇下痣系因车祸玻璃碴致假性痣“孙俪唇下痣没了”

5月28日,演员孙俪出席时尚芭莎年度派对时,人们注意到她唇下的痣不见了。随后,孙俪工作室发布了一组照片,证实了这一点。两天后,“孙俪唇下痣没了”这一话题登上热搜。早在《甄嬛传》播出期间,孙俪唇下的小黑点就引起了观众的关注。到了《芈月传》和《那年花开月正圆》播出…

17岁学生登顶珠峰保送清华?学校回应 并无此类招生计划

近日,多家媒体报道称北京第八十中学17岁的学生李浩榕成为中国首位从北坡登顶珠峰的青少年,并登上热搜。然而,根据国内媒体报道,河北16岁女孩丁禹琪在2020年也曾从北坡成功登顶珠峰。西藏登山协会证实,在中国业余登山爱好者中,李浩榕是珠峰北坡登顶的最年轻男性,丁禹琪是…