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

Implementation of MySQL GRANT user authorization

Authorization is to grant certain permissions to ...

Detailed explanation of the usage of the ESCAPE keyword in MySQL

MySQL escape Escape means the original semantics ...

A brief discussion on the understanding of TypeScript index signatures

Table of contents 1. What is an index signature? ...

Solve the problem of invalid utf8 settings in mysql5.6

After the green version of mysql5.6 is decompress...

Is it necessary to give alt attribute to img image tag?

Do you add an alt attribute to the img image tag? ...

Complete steps to use samba to share folders in CentOS 7

Preface Samba is a free software that implements ...

A thorough analysis of HTML special characters

A Thorough Analysis of HTML (14) Special Characte...

Comparing Document Locations

<br />A great blog post by PPK two years ago...

Table related arrangement and Javascript operation table, tr, td

Table property settings that work well: Copy code ...

How to limit the value range of object keys in TypeScript

When we use TypeScript, we want to use the type s...

React useMemo and useCallback usage scenarios

Table of contents useMemo useCallback useMemo We ...

A brief summary of my experience in writing HTML pages

It has been three or four months since I joined Wo...

Native js to implement drop-down box selection component

This article example shares the specific code of ...

Methods and steps to upgrade MySql5.x to MySql8.x

Several Differences Between MySQL 5.x and MySQL 8...