Web入门 ——生成验证码

news/2024/9/30 20:09:33
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>验证码</title><script>let currentCaptcha = '';function generateCaptcha() {const canvas = document.getElementById('captcha');const context = canvas.getContext('2d');context.font = '20px Arial';context.clearRect(0, 0, canvas.width, canvas.height);currentCaptcha = Math.random().toString(36).substring(2, 8);context.fillText(currentCaptcha, 10, 30);}function verifyCaptcha() {try {const input = document.getElementById('captcha-input').value;if (input && input.trim().toLowerCase() === currentCaptcha.toLowerCase()) {alert('验证码正确');console.info(input);document.getElementById('captcha-input').value = '';} else if (!input) {alert('请输入验证码!');} else {alert('验证码错误');document.getElementById('captcha-input').value = '';generateCaptcha();}} catch (error) {console.error('验证验证码时出现错误:', error);}}document.addEventListener('keydown', function (event) {if (event.key === 'Enter') {verifyCaptcha();}});// 初始化生成验证码generateCaptcha();</script>
</head><body><div class="captcha-container"><canvas id="captcha" width="100" height="40"></canvas><br><input type="text" id="captcha-input" class="captcha-input" placeholder="输入验证码" style="width: 100px;"><button onclick="verifyCaptcha()" class="captcha-button">验证</button><button onclick="generateCaptcha()" class="captcha-button">看不清?换一张</button><br></div>
</body></html>

  • const context = canvas.getContext('2d');:获取该 <canvas> 元素的 2D 绘图上下文
  • context.font = '20px Arial';绘制文本的字体样式
  • context.clearRect(0, 0, canvas.width, canvas.height);:清除 <canvas> 元素上的已有内容,从坐标 (0, 0) 开始,到 <canvas> 的宽度和高度范围。
  • currentCaptcha = Math.random().toString(36).substring(2, 8);:生成一个随机的验证码字符串。首先使用 Math.random() 生成一个 0 到 1 之间的随机数,然后将其转换为 36 进制字符串,再截取从索引 2 到索引 7 的部分作为验证码。
  • context.fillText(currentCaptcha, 10, 30);:在 <canvas> 上绘制生成的验证码,位置为横坐标 10、纵坐标 30 的地方。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[OI] 猫树

喵~>_<概述 猫树是一种与线段树类似的数据结构 线段树在解决不带修区间问题时,对于单次查询是 \(O(\log)\) 的,此时运用猫树就可以将单次查询的复杂度降到 \(O(1)\) 合理运用分块的思想,在区间内分块,思考我们在块上查询的过程设黑色的线段为整个区间,红色的线段为查…

往来现金中五花八门的单据

导语: T+往来现金里有很多单据,收款单、收入单、付款单、费用单、其他应收单、其他应付单…… 每张单据还有不同的单据类型,比如收款单这一种里就有普通收款、预收款、直接收款。 新人难免懵,比如下面这位:很多小伙伴会认为收入单就是收款,其实不是这样的原理,看完下面你…

【Ehviewer绿色版】2.0.8.4最新版本下载2024安卓苹果

Ehviewer开发应用程序(App)是一项综合性的工作,涉及从构思到发布等多个环节。以下是开发一个基本应用程序的教程,Ehviewer包括从概念设计到发布的完整流程。Ehviewer本教程将分别介绍 iOS 和 Android 平台的开发过程。 ehviewer官方安装包下载: http://ez.oubaidu.com/ 一…

为什么一定要学习正则表达式

为什么一定要学正则表达式 前言 为什么有正则表达式,以及为什么一定要学习正则表达式? 本文不去讨论正则表达式的历史,流派以及完整而复杂的用法,仅仅通过一个简单的搜索场景,把你带入正则表达式的世界,从此你将感受到“海阔凭鱼跃、天高任鸟飞”的痛快!,回归正题,假设…

Notepad--特色功能:拷贝另存为

Notepad--特色功能:拷贝另存为 你是否纠结如下的使用场景:正在编辑的文件,还没有想好,保存担心把原文件给覆盖了。 使用“另存为”后当前编辑界面的文档又变成新的文件了,可是你还想继续在原文件上工作,还得再打开原文件。咋办? 你会新建一个文档,把当前的内容拷贝一份…

Paper Reading: Deep balanced cascade forest: An novel fault diagnosis method for data imbalance

本文基于级联森林提出了一种用于不平衡故障检测数据集的模型 DBCF,该模型设计了优化的级联随机森林,从数据层面和算法层面改进不平衡学习。首先提出了一种新的多通道级联旋转机械故障诊断框架,该框架将数据级方法和算法级方法相结合。然后提出了一种混合采样方法,通过生成新…

模拟赛

补题发现自己还有好多题没改/总结,所以弄了这么个东西; 空着的就是还没改完或者是没来得及写题解的。 由于目前还在不断地打新的模拟赛,所以大概会从两头向中心更新( 最新:[35] csp-s模拟6 [0] CSP提高组模拟1 A 最短路 原题:P2966 Cow Toll Paths G \(n \le 300\),考虑…