前端生成验证码

news2024/9/22 7:28:38

一.效果图

二、实现

2.1html

<template>
  <div class="outer-box">
    <div class="code-box">
      <div class="inout-code">
        <label class="label" for="inputCode">验证码:</label>
        <input type="text" v-model="inputCode" id="inputCode" />
      </div>
      <div class="code-show" @click.prevent="generateCode">
        <canvas ref="canvas" width="100" height="40"></canvas>
      </div>
    </div>
    <input type="button" value="确定" @click="checkCode" />
  </div>
</template>

2.2js

// 定义响应式变量
const canvas = ref(null);
const code = ref('');
const inputCode = ref('');

// 生成验证码的函数
const generateCode = () => {
  const characters = 'qwertyuiopasdfghjklzxcvbnm123456789';
  code.value = Array.from({ length: 4 }, () => characters.charAt(Math.floor(Math.random() * characters.length))).join('');

  drawCode();
};

// 将验证码绘制到 canvas 上
const drawCode = () => {
  const ctx = canvas.value.getContext('2d');
  ctx.clearRect(0, 0, canvas.value.width, canvas.value.height);

  // 绘制背景
  ctx.fillStyle = '#9d2e2e';
  ctx.fillRect(0, 0, canvas.value.width, canvas.value.height);

  // 设置字体样式
  ctx.font = '24px Arial';
  ctx.textAlign = 'center';
  ctx.textBaseline = 'middle';

  // 绘制验证码字符
  code.value.split('').forEach((char, index) => {
    ctx.fillStyle = `#${Math.floor(Math.random() * 16777215).toString(16)}`;
    ctx.fillText(char, (canvas.value.width / 5) * (index + 1), canvas.value.height / 2);
  });
};

// 初始化验证码
const initCode = () => {
  nextTick(generateCode);
};

// 校验输入的验证码
const checkCode = () => {
  if (code.value.toLowerCase() !== inputCode.value.toLowerCase()) {
    alert('您输入的验证码不正确');
    inputCode.value = '';
    generateCode(); // 重新生成验证码
  } else {
    alert('验证码正确');
  }
};

// 组件挂载时生成验证码
onMounted(initCode);

2.3style

<style scoped>
.code-box{
  display: flex;
  gap: 10px;
  align-items: center;
}
</style>

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

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

相关文章

内存管理篇-05物理页面的迁移类型migratetype

本节内容依旧是对上节课伙伴系统的补充&#xff0c;主要介绍了新版伙伴系统的页面迁移相关的内容 为什么要引入页面迁移类型&#xff1f;新版本伙伴系统针对老版本的伙伴系统的升级改进。主要优化memory compaction内存碎片整理的过程。 页面迁移实际上就是伙伴系统中free_area…

第一次get到学习大模型的沉浸感和成就感 ,大模型入门必看!!<大模型应用开发极简入门>(PDF分享)

人工智能大潮已来&#xff0c;不加入就可能被淘汰。就好像现在职场里谁不会用PPT和excel一样&#xff0c;基本上你见不到。 而大模型是人工智能代表&#xff0c;潜力与使用方式有关。使用好大模型可提高效率&#xff0c;让人获得更好的待遇和更多机会。所以今天给大家推荐一本…

【STM32】中断

中断与GPIO一样是STM32中非常常用的东西&#xff0c;以我一个写上位机的人的理解&#xff0c;它相当于上位机程序中多线程的地位&#xff0c;因为多线程和中断都是为了提高某些响应的实时性。悄悄说一句&#xff0c;我觉得中断在一定程度上比多线程还好用。哈哈哈哈哈哈哈~ 大部…

竖图秒变横屏壁纸!AI绘画SD最强控制插件ControlNet教程,一键实现图片的扩展式填充真的太强了!

大家好&#xff0c;我是画画的小强 经常用PhotoShop作图的人都知道&#xff0c;自从去年PS2023beta版的发布&#xff0c;引入了AI绘画给广大创作者带来了不小的惊喜&#xff0c;最主要的就是它的“创成式填充”&#xff0c;通过现有图片可以进行扩展和延展&#xff0c;其强大的…

Vue2 中 $set 用法详细讲解

给变量重复赋值&#xff0c;Vue 监测不到数据变化。这个时候&#xff0c;双向绑定就失效了。 1、为什么要用set&#xff1f; 在vue中&#xff0c;并不是任何时候数据都是双向绑定的。 在官方文档中&#xff0c;有这样一段话&#xff0c;如下&#xff1a; 从文档得知&#xff…

wpf 定制 个性圆角信息面板

先上图&#xff1a; 代码实现&#xff1a; <Canvas Grid.Column"1"><Border Background"#5665F4" BorderBrush"#5665F4" BorderThickness"0.5" CornerRadius"10,10,10,30"Width"180" Height"165&qu…

CSS背景与边框——WEB开发系列18

网页设计中&#xff0c;背景和边框是用于提升视觉效果的关键元素。CSS&#xff08;层叠样式表&#xff09;提供了丰富的功能来定制这些视觉效果&#xff0c;确保网页看起来既美观又符合设计需求。 一、背景样式 背景样式在网页设计中起着至关重要的作用。它们可以用来增加页面…

qt在ui上面给QWidget设置布局

如图所示&#xff0c;我们无法给QWidget设置布局 拖拽一个GridLayout进来&#xff0c;设置QWidget布局&#xff0c;然后删掉该GridLayout 结果QWidget设置网格布局

广州自闭症全托管学校-正规儿童康复中心

在繁华的广州城&#xff0c;有一个特殊的地方&#xff0c;那就是致力于自闭症儿童康复的星贝育园。星贝育园不仅在广州拥有校区&#xff0c;在浙江也有三个校区&#xff0c;它就像一盏明灯&#xff0c;照亮了自闭症儿童和他们家庭的前行之路。 走进星贝育园&#xff0c;你会感…

【CUDA编程笔记】thrust::device_vector<float> signal无法编译问题记录

thrust::device_vector signal无法编译问题记录 CUDA编程笔记 一、问题记录 正常编译时&#xff0c;无法编译 二、源码 #include <thrust/host_vector.h> #include <thrust/device_vector.h> #include <thrust/generate.h> #include <thrust/sort.…

22:【stm32】定时器三:输出比较

输出比较 1、简介2、标准库编程 1、简介 通过CCR里面的值和计数器CNT里面的值进行比较&#xff0c;然后输出高电平/单片机&#xff0c;进而产生需要的信号。 如上图所示&#xff0c;预分频器71&#xff0c;则最小单元为1us&#xff0c;自动重装器为999&#xff0c;则周期为1ms…

InternLM + LlamaIndex RAG 实践

1. 环境配置 首先创建一个虚拟环境 conda create -n llamaindex python3.10 为虚拟环境安装以下安装包 conda activate llamaindex conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia pip install einops pip install …

Midjourney提示词-动物系列-65

A super cute little anthropomorphic,sheep of the Chinese Zodiac, wearing berets ,in a Hanfu in red style,standing, eyes,cute tail,super realistic,super detail,luxurious,elegant,Unreal Engine,octane render, 8K,VRAY super realistic Pixar Style, Tiny cute…

百数功能插件技术解析:审批流程设置与数据填写便捷性探讨

低代码平台作为一种创新的开发工具&#xff0c;正逐渐受到企业的青睐。为了进一步提升用户体验&#xff0c;满足用户多样化的需求&#xff0c;百数低代码平台开通了“有问必答”板块。 问题1&#xff1a;功能插件到底有什么用&#xff1f;都用在哪些位置&#xff1f; 功能插件…

【大模型系列】Flash-VStream(2024.06)

● Paper&#xff1a;https://arxiv.org/pdf/2406.08085v1 ● Github&#xff1a;https://github.com/IVG-SZ/Flash-VStream?tabreadme-ov-file#structure ● HuggingFace&#xff1a;https://huggingface.co/spaces/IVGSZ/Flash-VStream-demo ● Author&#xff1a;Haoji Zha…

line-height的使用场景

line-height:字面含义为行高&#xff0c;行高有三部分组成&#xff0c;分为内容高度&#xff0c;上间距&#xff0c;下间距。 可以看到文本在div盒子中的默认位置是左上角。此时文字部分的行高只有内容高度在支撑&#xff0c;上间距和下间距都是0。鼠标在字体上滑动时的蓝色部…

【重点】人工智能大语言模型技术发展研究报告2024|附下载

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力&#xff0c;正在引发经济、社会、文化等领域的变革和重塑。 2023 年以来&#xff0c;以ChatGPT、GPT-4 为代表的大模型技术的出台&#xff0c;因其强大的内容生成及多轮对话能力&#xff0c;引发全球新…

第2章-06-Cookie在网站回话中的作用

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

3.5mm耳机插头制作手机内录线电路图

1.背景 无人直播或录屏直播手机mic会对外界声音的录入&#xff0c;而且很嘈杂。 2.实现功能 手机酷狗播放音频&#xff0c;同时手机内打开录音软件录音&#xff0c;同一台手机操作。 3.电路图 接线分为2种&#xff0c;国标和美标&#xff0c;自己尝试&#xff0c;肯定有一…

链表OJ题——链表的中间节点

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 链表的中间节点 二、解题思路 三、解题代码