首页 > 其他分享 >Web入门 ——生成验证码

Web入门 ——生成验证码

时间:2024-09-30 20:00:27浏览次数:5  
标签:Web canvas 入门 currentCaptcha 验证码 context input document

<!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 的地方。

标签:Web,canvas,入门,currentCaptcha,验证码,context,input,document
From: https://www.cnblogs.com/ss1010/p/18442382

相关文章

  • 网站二级域名+cploar+shinyproxy构建web APP私有服务器
    网站二级域名+cploar+shinyproxy构建webAPP私有服务器WebAPP是一种功能相对单一的,可以在浏览器中运行的应用程序,构建相对容易且易于传播,被认为是临床预测模型最佳的载体。一种理想的情况,就是我们将构建的各种临床预测模型放置到网上,以“微服务”的形式存在,需要的时候登......
  • SQLite 入门教程
    SQLite入门教程 不是MySQL用不起,而是SQLite更有性价比,绝大多数的Web应用SQLite都可以满足。SQLite 是一个用C语言编写的开源、轻量级、快速、独立且高可靠性的SQL数据库引擎,它提供了功能齐全的数据库解决方案。SQLite几乎可以在所有的手机和计算机上运行,......
  • Qt 入门
    1、概述1.1、什么是QtQt是一个跨平台的C++图形用户界面应用程序框架,它为应用程序开发者提供建立艺术级图形界面的所有功能,它是完全面向对象的,很容易扩展,并且允许真正的组件编程。1.2、Qt的发展史1991年Qt最早由奇趣科技开发;1996年进入商业领域,它也是目前流行的Linux桌面环境K......
  • Docker入门实践(五)
    什么是容器?定义容器是每个应用组件的独立进程,它完全和你机器的其他东西隔离。独立性:每个容器包含所有它需要的功能,不依赖于主机上预安装的依赖项。隔离行:由于容器是隔离运行的,它们对主机和其他容器的影响最小,增加了应用的安全性。独立性:每个容器独立管理,删除一个容器不会......
  • 如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监
    目录一、需求二、方案2.1、计划方案2.2、实施准备2.2.1所需配置的产品和服务2.2.1.1云主机 (1)选择云平台 (2)配置云服务器2.2.2.2视频监控平台软件(1)视频监控平台软件(2)软件安装与配置2.2.2.3客户端访问2.2.2所需配置的人员三、选择公网的云视频监控接入平台3.1、......
  • WPF MVVM入门系列教程(二、依赖属性)
    说明:本文是介绍WPF中的依赖属性功能,如果对依赖属性已经有了解了,可以浏览后面的文章。 为什么要介绍依赖属性在WPF的数据绑定中,密不可分的就是依赖属性。而MVVM又是跟数据绑定紧密相连的,所以在学习MVVM之前,很有必须先学习一下依赖属性。 依赖属性(DepencencyProperty)是什......
  • idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)
    前言如何在新版idea中搭建一个javaWeb项目,并且应用在物理的tomcat中,本文将进行从零到一,完成搭建步骤,以及相关注意事项的讲解。为什么需要配置tomcat?我们开发的javaWeb项目,最后都需要打包部署到真正的物理tomcat上发布运行;在开发阶段,我们想要测试javaWeb项目,除了使用maven......
  • Python基于web的社区居民帮扶信息管理系统的设计与实现
    目录python语言框架介绍技术可行性具体实现截图技术栈系统的稳定性和可维护性核心代码部分展示详细视频演示系统测试源码获取方式python语言Python具有强大的优势,通过简洁的语法和类库进行操作。而且Python提供了许多的控制语句,比如if语句、for语句,while语句。在数......
  • MongoDB入门
    MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。下载DownloadMongoDBCommunityServer|MongoDBMongoDB的基本操作添加数据db.collection.insertOne(document)//插入单个文档db.collection.insertMany([......
  • [Python数据分析]最通俗入门Kmeans聚类分析,可视化展示代码。
     什么是k-means分析?【头条@William数据分析,看原版】    想象一下,你有一堆五颜六色的糖果,你想把它们按照颜色分成几堆。k-means分析就是这么一个自动分类的过程。它会根据糖果的颜色特征,把它们分成若干个组,每个组里的糖果颜色都比较相似。更专业一点说,k-means分析是一......