JS 验证码功能的三种实现方式

下面为您讲解JS验证码功能的三种实现方式的完整攻略。

方式一:纯前端方法生成

实现过程

  1. 在HTML页面中添加验证码输入框和一个生成验证码的按钮;
  2. JS随机生成一个包含数字和字母的随机字符串并将其绑定到验证码文本框上;
  3. 当用户输入验证码并提交时,将输入的验证码与生成的验证码进行比较,判断验证码是否正确。

代码示例

HTML部分:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JS验证码示例</title>
</head>
<body>
    <p>请输入验证码:</p>
    <input type="text" id="code-input" placeholder="验证码">
    <button onclick="createCode()">生成验证码</button>
    <button onclick="verifyCode()">提交</button>
</body>
</html>

JS部分:

var code; //存放生成的验证码
function createCode() {
    //随机生成一个包含数字和字母的随机字符串
    code = '';
    var codeLength = 4; //验证码长度
    var selectChar = new Array(0,1,2,3,4,5,6,7,8,9,
                                'a','b','c','d','e','f','g','h','i','j',
                                'k','l','m','n','o','p','q','r','s','t',
                                'u','v','w','x','y','z','A','B','C','D',
                                'E','F','G','H','I','J','K','L','M','N',
                                'O','P','Q','R','S','T','U','V','W','X','Y','Z');
    for (var i = 0; i < codeLength; i++) {
        var index = Math.floor(Math.random() * 62); //取得随机数的索引(0~35)
        code += selectChar[index]; //根据索引取得随机数加到code上
    }
    document.getElementById('code-input').value = code; //把code值赋给验证码文本框
}
function verifyCode() {
    //获取用户输入的验证码并与生成的验证码进行比较
    var inputCode = document.getElementById('code-input').value;
    if(inputCode.length <= 0) {
        alert('请输入验证码!');
    } else if(inputCode.toUpperCase() != code.toUpperCase()) {
        alert("验证码输入有误!");
        createCode();//刷新验证码
    }else {
        alert('验证码正确!');
    }
}

方式二:结合后端API生成

实现过程

  1. 后端提供生成验证码的API;
  2. 在HTML页面中添加验证码输入框和一个生成验证码的按钮;
  3. 当用户点击生成验证码的按钮时,调用后端API生成验证码并返回到页面上进行展示;
  4. 当用户输入验证码并提交时,将输入的验证码传递给后端API进行比较,判断验证码是否正确。

代码示例

HTML部分和方式一相同。

JS部分:

function createCode() {
    //调用后端API生成验证码并返回到页面上
    var img = document.createElement("img");
    img.src = "http://www.example.com/getCode"; //调用后端API
    document.getElementById("code-input").parentNode.insertBefore(img, document.getElementById("code-input"));
}
function verifyCode() {
    //获取用户输入的验证码并传递给后端API进行比较
    var inputCode = document.getElementById('code-input').value;
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://www.example.com/checkCode?code=" + inputCode, true); //调用后端API
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if(xhr.responseText == "true") {
                alert("验证码正确!");
            } else {
                alert("验证码输入有误!");
                createCode();//刷新验证码
            }
        }
    }
    xhr.send();
}

方式三:HTML5的canvas绘图技术生成

实现过程

  1. 在HTML页面中添加一个canvas标签和一个生成验证码的按钮;
  2. JS使用HTML5的canvas绘图技术随机生成一个包含数字和字母的随机字符串并在canvas中进行绘制;
  3. 当用户输入验证码并提交时,将输入的验证码与生成的验证码进行比较,判断验证码是否正确。

代码示例

HTML部分:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML5Canvas验证码示例</title>
</head>
<body>
    <p>请输入验证码:</p>
    <input type="text" id="code-input">
    <br>
    <canvas id="code-canvas" width="120" height="30"></canvas>
    <button onclick="createCode()">生成验证码</button>
    <button onclick="verifyCode()">提交</button>
</body>
</html>

JS部分:

var code; //存放生成的验证码
var canvas = document.getElementById('code-canvas'); //获取canvas元素
var ctx = canvas.getContext('2d'); //获取画布上下文
ctx.font = 'bold 24px Arial'; //设置字体

function createCode() {
    //随机生成一个包含数字和字母的随机字符串
    code = '';
    var codeLength = 4; //验证码长度
    var selectChar = new Array(0,1,2,3,4,5,6,7,8,9,
                                'a','b','c','d','e','f','g','h','i','j',
                                'k','l','m','n','o','p','q','r','s','t',
                                'u','v','w','x','y','z','A','B','C','D',
                                'E','F','G','H','I','J','K','L','M','N',
                                'O','P','Q','R','S','T','U','V','W','X','Y','Z');
    for (var i = 0; i < codeLength; i++) {
        var index = Math.floor(Math.random() * 62); //取得随机数的索引(0~35)
        code += selectChar[index]; //根据索引取得随机数加到code上
    }
    //在canvas中绘制验证码
    ctx.clearRect(0,0,canvas.width,canvas.height); //清除画布
    ctx.strokeText(code,canvas.width/2-30,canvas.height/2+10);
}
function verifyCode() {
    //获取用户输入的验证码并与生成的验证码进行比较
    var inputCode = document.getElementById('code-input').value;
    if(inputCode.length <= 0) {
        alert('请输入验证码!');
    } else if(inputCode.toUpperCase() != code.toUpperCase()) {
        alert("验证码输入有误!");
        createCode();//刷新验证码
    }else {
        alert('验证码正确!');
    }
}

createCode(); //初始自动生成验证码

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 验证码功能的三种实现方式 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS判断字符串字节数并截取长度的方法

    下面我将详细讲解JS如何判断字符串字节数并截取长度的方法,包括以下几个步骤: 步骤一:获取字符串的字节数 在JS中,一个字符串的字节数并不是它的长度,而是它所占用的字节数,因为JS中的所有字符串都是基于Unicode编码的。因此,我们需要使用一个辅助函数来计算字符串的字节数。下面是一个简单的实现: function getByteLength(str) { …

    JavaScript 2023年5月28日
    00
  • JS中使用正则表达式g模式和非g模式的区别

    使用正则表达式(RegEx)是JavaScript中的一个重要功能,它可以让我们在字符串中搜索并匹配特定的模式。JS中的正则表达式还有两种匹配模式:g模式和非g模式。在本文中,我们将详细讲解这两种模式的区别。 什么是正则表达式g模式和非g模式? 在JS中,我们通过在正则表达式文本后添加一个标志来指定其模式。g模式和非g模式具有以下区别: g模式 g模式代表全…

    JavaScript 2023年6月10日
    00
  • JS实现的数组去除重复数据算法小结

    JS实现的数组去除重复数据算法小结 1. 利用Set去重 使用Set集合可以简便地去除数组中的重复元素,具体步骤如下: 定义一个Set集合 使用Array.from()方法将数组转换为一个新的Set集合 下一步,我们需要将Set集合转换为数组,使用Array.from()方法即可 示例代码: function unique(arr) { return Arr…

    JavaScript 2023年5月28日
    00
  • 用javascript获取当页面上鼠标光标位置和触发事件的对象的代码

    获取鼠标光标位置和触发事件对象是Javascript开发中常用的技能,下面将介绍如何使用Javascript获取鼠标光标位置和事件对象。 获取鼠标光标位置 获取鼠标光标位置可以使用鼠标事件的clientX和clientY属性。clientX和clientY表示鼠标当前的X坐标和Y坐标。 示例一:在鼠标点击事件中获取光标位置 document.addEvent…

    JavaScript 2023年6月10日
    00
  • 一文讲清JS中for循环的所有用法

    一文讲清JS中for循环的所有用法 在JavaScript中,for循环是一种常见的控制流语句,它可以帮助我们快速地对一个集合中的元素进行遍历。本文将介绍JavaScript中for循环的各种用法。 for循环的基本语法 for循环的基本语法如下: for (initialization; condition; increment) { statement;…

    JavaScript 2023年6月10日
    00
  • js实现0ms延时定时器的几种方式

    下面是详细的讲解“js实现0ms延时定时器的几种方式”的完整攻略。 什么是“0ms延时定时器” “0ms延时定时器”是指在JavaScript定时器中设置的延时时间为0ms,并且能够保证事件队列中下一个任务的执行完全在当前任务结束后立即执行。这种延时定时器对于实时性要求较高的操作非常有用,例如画布绘制、游戏开发等。 几种实现方式 以下是几种实现“0ms延时定…

    JavaScript 2023年6月11日
    00
  • 找到了一篇jQuery与Prototype并存的冲突的解决方法

    下面是完整的攻略。 找到了一篇jQuery与Prototype并存的冲突的解决方法 在开发网页时,有时需要同时使用 jQuery 和 Prototype 这两个 JavaScript 库。但是,由于两者都使用了 $ 符号作为入口点,导致它们之间发生了冲突,这使得我们不能同时使用它们。在这里,我们将提供一种解决冲突的方法。 1. 使用jQuery.noConf…

    JavaScript 2023年6月11日
    00
  • element实现合并单元格通用方法

    当需要将某些单元格合并为一个单元格时,我们可以使用colspan和rowspan属性进行处理。但这些属性只适用于表格的较小区域。如果我们需要在整个表格中合并单元格,这时候就可以使用JavaScript来实现。element库提供一个通用方法来实现合并单元格。下面是具体步骤: 获取表格元素 首先,需要获取到需要合并单元格的表格元素。这可以通过元素的ID来获取,…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部