当前位置: 首页 > article >正文

如何在 uniapp 中实现图形验证码

全篇大概2000 字(含代码),建议阅读时间10分钟。

什么是图形验证码?

        图形验证码(也称为图片验证码或验证码图像)通常用于防止机器人自动提交表单,确保用户是人工操作。

一、需求

我们希望在一个表单中实现以下功能:

1.用户输入手机号。

2.用户看到一个图形验证码,并输入验证码内容。

3.用户点击“发送短信”按钮,发送验证码到指定手机号。

二、实现步骤

2.1 项目准备 

创建一下一个uniapp项目,项目名称自拟。

2.2 页面结构

首先,我们设计一个简单的页面布局,其中包括手机号输入框、图形验证码图片、验证码输入框以及发送短信按钮。

<template>
  <view class="container">
    <view class="phone-container">
      <view class="label-title">
            手机号<label>*</label>
      </view>
      <input 
           v-model="phone"
           placeholder="请输入手机号"
           type="number"
           maxlength="11" />
    </view>
    <view class="verification-container">
      <img
        :src="captchaImage"
        alt="验证码"
        class="captcha"
        @click="refreshCaptcha"
      />
      <input 
        v-model="verificationCode" 
        placeholder="请输入验证码" 
        maxlength="4" 
        type="number" 
        class="verification-input" />
    </view>
    <button @click="sendSMS" class="sendBtn">发送短信</button>
  </view>
</template>

2.3 处理数据和方法

接下来,我们将处理数据和方法的部分。

data 中定义手机号、验证码输入、图形验证码等字段。

methods 中,我们需要实现以下几个功能:

generateCaptcha:生成一个随机的图形验证码。

refreshCaptcha:点击图形验证码时刷新验证码。

sendSMS:点击发送短信按钮时触发发送短信的逻辑。

<script>
export default {
  data() {
    return {
      phone: '',             // 用户输入的手机号
      verificationCode: '', // 用户输入的验证码
      captchaImage: '',     // 图形验证码图片地址
    };
  },
  methods: {
    sendSMS() {
      /*
       * 发送短信
       */
      console.log('发送短信到:', this.phone);
    },
    generateCaptcha() {
      /*
       * 生成一个随机的验证码并显示为图片
       */
       // 生成一个4位数的验证码
      const captcha = Math.floor(1000 + Math.random() * 9000);
       // 使用一个免费的图片生成服务
      this.captchaImage = `https://dummyimage.com/100x40/000/fff&text=${captcha}`; 
    },
    refreshCaptcha() {
      /*
       * 刷新验证码
       */
      this.generateCaptcha(); // 重新生成验证码
    },
  },
  mounted() {
    /*
     * 页面加载时生成验证码
     */
    this.generateCaptcha();
  },
};
</script>

2.4 CSS样式

<style>
.container {
  padding: 20px;
}

.phone-container {
  margin-bottom: 20px;
}

.label-title {
  font-size: 16px;
  margin-bottom: 5px;
}

input {
  width: 100%;
  padding: 10px;
  margin-top: 5px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.verification-container {
  display: flex;
  align-items: center;
  margin-bottom: 20px;
}

.captcha {
  width: 100px;
  height: 40px;
  margin-right: 10px;
  cursor: pointer;
}

.verification-input {
  flex: 1;
  padding: 10px;
  font-size: 16px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.sendBtn {
  background-color: #00ac56;
  color: white;
  padding: 10px;
  border-radius: 4px;
  font-size: 16px;
  cursor: pointer;
}

.sendBtn:hover {
  background-color: #008c4e;
}
</style>

三、图形验证码实现逻辑

生成验证码:使用一个免费的图片生成服务(https://dummyimage.com/)来生成验证码。我们生成一个随机的4位数,然后通过 dummyimage.com 服务生成带有文本的图片作为验证码。

刷新验证码:当用户点击验证码图片时,调用 refreshCaptcha 方法重新生成一个新的验证码。

 

四、总结

图形验证码是防止机器人滥用表单的有效手段。通过集成免费的验证码图片生成服务,我们可以快速构建图形验证码的功能,并结合输入框和按钮完成整个用户交互流程。

希望这篇文章对你有所帮助,如果有任何问题或改进建议,欢迎在评论区留言!

相关文章

你从未见过的 10 个令人惊叹的 JavaScript 技巧

 HTML+CSS+JS 实现动态模态超级英雄卡片效果

使用 HTML 和 CSS 创建 3D 菜单效果 


http://www.kler.cn/a/384066.html

相关文章:

  • 双指针算法篇——一快一慢须臾之间解决问题的飘逸与灵动(3)
  • sql报错信息将字符串转换为 uniqueidentifier 时失败
  • 测试自动化如何和业务流程结合?
  • CPU Study - Instructions Fetch
  • 大模型LLama3!!!Ollama下载、部署和应用(保姆级详细教程)
  • #渗透测试#SRC漏洞挖掘#XSS跨站脚本介绍02绕过
  • m6ATM
  • 一文解秘Rust如何与Java互操作
  • ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
  • 实战攻略 | ClickHouse优化之FINAL查询加速
  • 雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。
  • 数据库期末考试简答题
  • 元器件篇——自恢复保险丝(PPTC)
  • CNN和RCNN的关系和区别
  • Java基础Day-Thirteen
  • 【算法——二维动态规划】
  • 探索前端框架:为你的项目选择合适的UI工具箱
  • React native Text Webview 处理字体大小的变化
  • Docker + Jenkins + gitee 实现CICD环境搭建
  • 部署stable-diffusion3.5 大模型,文生图
  • 【计算机视觉基础】卷积
  • 智慧场馆:安全、节能与智能化管理的未来
  • 西门子S7-1200 PLC脉冲控制实例的完整流程
  • 软件著作权申请教程(超详细)(2024新版)软著申请
  • 链表面试题(C 语言)
  • 小程序中引入下载到本地的iconfont字体图标加载不出来问题解决