Vue implements graphic verification code

Vue implements graphic verification code

This article example shares the specific code of Vue to implement the graphic verification code for your reference. The specific content is as follows

Effect picture:

or

or

or

Code:

Verification code component:

src/common/sIdentify.vue

<template>
  <div class="s-canvas">
    <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
  </div>
</template>
<script>
  export default {
    name: 'SIdentify',
    props: {
      identifyCode:
        type: String,
        default: '1234'
      },
      fontSizeMin: {
        type: Number,
        default: 18
      },
      fontSizeMax: {
        type: Number,
        default: 40
      },
      backgroundColorMin: {
        type: Number,
        default: 180
      },
      backgroundColorMax: {
        type: Number,
        default: 240
      },
      colorMin:
        type: Number,
        default: 50
      },
      colorMax: {
        type: Number,
        default: 160
      },
      lineColorMin: {
        type: Number,
        default: 40
      },
      lineColorMax: {
        type: Number,
        default: 180
      },
      dotColorMin: {
        type: Number,
        default: 0
      },
      dotColorMax: {
        type: Number,
        default: 255
      },
      contentWidth: {
        type: Number,
        default: 111
      },
      contentHeight: {
        type: Number,
        default: 38
      }
    },
    methods: {
      // Generate a random number randomNum(min, max) {
        return Math.floor(Math.random() * (max - min) + min)
      },
      // Generate a random color randomColor(min, max) {
        let r = this.randomNum(min, max)
        let g = this.randomNum(min, max)
        let b = this.randomNum(min, max)
        return 'rgb(' + r + ',' + g + ',' + b + ')'
      },
      drawPic() {
        let canvas = document.getElementById('s-canvas')
        let ctx = canvas.getContext('2d')
        ctx.textBaseline = 'bottom'
        // Draw the background ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
        ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
        // Draw text for (let i = 0; i < this.identifyCode.length; i++) {
          this.drawText(ctx, this.identifyCode[i], i)
        }
        // this.drawLine(ctx) // Draw interference line // this.drawDot(ctx) // Draw interference point},
      // Draw text drawText(ctx, txt, i) {
        ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
        ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
        let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
        let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
        var deg = this.randomNum(-30, 30) // Character rotation angle (preferably no more than 45 degrees)
        // Modify the coordinate origin and rotation angle ctx.translate(x, y)
        ctx.rotate(deg * Math.PI / 180)
        ctx.fillText(txt, 0, 0)
        // Restore the coordinate origin and rotation angle ctx.rotate(-deg * Math.PI / 180)
        ctx.translate(-x, -y)
      },
      drawLine(ctx) {
        // Draw interference lines for (let i = 0; i < 8; i++) {
          ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
          ctx.beginPath()
          ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
          ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
          ctx.stroke()
        }
      },
      drawDot(ctx) {
        // Draw interference points for (let i = 0; i < 100; i++) {
          ctx.fillStyle = this.randomColor(0, 255)
          ctx.beginPath()
          ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
          ctx.fill()
        }
      }
    },
    watch:
      identifyCode() {
        this.drawPic()
      }
    },
    mounted() {
      this.drawPic()
    }
  }
</script>

Parent Component

<template>
  <div>
    <div>Verification code test</div>
    <div @click="refreshCode()" class="code" style="cursor:pointer;" title="Click to switch verification code">
      <s-identify :identifyCode="identifyCode"></s-identify>
    </div>
  </div>
</template>

<script>
import { defineComponent } from 'vue';
import sIdentify from "@/common/sIdentify.vue";
// import axios from 'axios'
export default defineComponent({
  name: 'WatermarkTest',
  components: { sIdentify },
  data() {
    return {
      identifyCode: "",
      identifyCodes: ['0','1','2','3','4','5','6','7','8','9','a','b','c','d'], //Add the characters you want according to actual needs}
  },
  mounted() {
    this.refreshCode()
 },
 unmounted() {

 },
  methods: {
    // Generate random number randomNum(min, max) {
      max = max + 1
      return Math.floor(Math.random() * (max - min) + min);
    },
    // Update verification code refreshCode() {
      this.identifyCode = "";
      this.makeCode(this.identifyCodes, 4);
      console.log('Current verification code:',this.identifyCode);
    },
    // Randomly generate verification code string makeCode(data, len) {
      console.log('data, len:', data, len)
      for (let i = 0; i < len; i++) {
        this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes.length-1)]
      }
    },
  },
});
</script>

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Simple implementation of the 60-second countdown function of the vue verification code
  • vue implements the registration function of sending SMS verification code through mobile phone
  • Vue generates a random verification code sample code
  • Vue+element-ui integrates random verification code + username + password form verification function
  • VUE implements image verification code function
  • How to add mobile verification code component function in Vue
  • Vue implements verification code input box component
  • Vue implements sliding puzzle verification code function
  • Vue project implements graphic verification code
  • Vue implements picture verification code when logging in

<<:  In-depth analysis of the slow query problem of MySQL Sending data

>>:  How to set up Referer in Nginx to prevent image theft

Recommend

Nginx access log and error log parameter description

illustrate: There are two main types of nginx log...

Sample code on how to implement page caching in vue mobile project

background On mobile devices, caching between pag...

Example of Vue uploading files using formData format type

In Vue, we generally have front-end and back-end ...

An IE crash bug

Copy code The code is as follows: <style type=...

Nginx prohibits direct access via IP and redirects to a custom 500 page

Directly to the configuration file server { liste...

Solution to the Chinese garbled characters problem in MySQL under Ubuntu

Find the problem I have been learning Django rece...

Simple example of limit parameter of mysql paging

Two parameters of Mysql paging select * from user...

How to view the docker run startup parameter command (recommended)

Use runlike to view the docker run startup parame...

Using JavaScript in HTML

The <script> tag In HTML5, script has the f...

CSS imitates Apple's smooth switch button effect

Table of contents 1. Code analysis 2. Source code...

Detailed summary of mysql sql statements to create tables

mysql create table sql statement Common SQL state...

Build a severe weather real-time warning system with Node.JS

Table of contents Preface: Step 1: Find the free ...

Pure CSS to achieve a single div regular polygon transformation

In the previous article, we introduced how to use...