jQuery验证码插件:jquery.idycode.js

2023-11-17

对于任何一个又评论功能的网站来说,验证码都是重中之重。没有验证码的话,用户就可以肆意刷评论,甚至是通过一些工具来操作,会对网络环境产生极大的危害。
验证码这个词最早是在2002年由卡内基梅隆大学的路易斯·冯·安、Manuel Blum、Nicholas J.Hopper以及IBM的John Langford所提出。卡内基梅隆大学曾试图申请此词使其成为注册商标, 但该申请于2008年4月21日被拒绝。一种常用的CAPTCHA测试是让用户输入一个扭曲变形的图片上所显示的文字或数字,扭曲变形是为了避免被光学字符识别(OCR, Optical Character Recognition)之类的电脑程序自动辨识出图片上的文数字而失去效果。由于这个测试是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,人们有时称CAPTCHA是一种反向图灵测试。

图片描述

而近些年,各式各样的其他验证码也纷纷出现:滑动块验证码,汉字九宫格验证码,图像热区验证码,以及12306坑爹的验证码...

图片描述

图片描述

图片描述


这些验证码,相对于传统的验证码,提供了更好的人机交互和安全性,都是工程师们智慧的结晶。

赶风不赶雨,我们最近由于jsp的实验,需要做一个系统,而我的选题里恰好有评论功能,因此验证码对我也是必须的!
因为jsp学的一知半解,二来时间紧,不想在网上查找jsp图像的相关方法,所以,传统的验证码对我来说就白白了。而网上一些开源的验证码插件有有些复杂,况且不知道运行机制用起来容易出错。
于是就有了自己做个验证码的想法。经过一段时间的敲键盘,总算有个样子了,虽然不是多漂亮:

图片描述


就是这样,很简单的九宫格。数字的顺序是后台服务器随机排序的,前端用ajax请求后台验证码信息,并获取用户点击顺序的信息,用户点击完成后,动态在表单中添加验证码字段的信息,发送给服务器做验证。
思路真是相当简单,实现方法也容易,嘿嘿。

图片描述


为了方便使用,我将这个验证码功能封装成jquery的插件,下面提供源码供大家参考:

;(function($){
    $.extend({
        'idycode':function(options){
            options = $.extend({
                'form':null,
                'codeSelector':'.identityCode',
                'itemSelector':'.item',
            },options);
            $('<style></style>',{type:'text/css'})
            .html(options.codeSelector+'{'+
                    'width: 300px;'+
                    'height: 300px;'+
                    'background: #ccc;'+
                '} '+
                options.codeSelector+' '+options.itemSelector+'{'+
                    'width: 90px;'+
                    'height: 90px;'+
                    'line-height: 90px;'+
                    'background: #666;'+
                    'margin: 5px;'+
                    'float: left;'+
                    'color: white;'+
                    'font-size: 4em;'+
                    'text-align: center;'+
                '} '+
                options.codeSelector+' '+options.itemSelector+':hover{'+
                    'cursor: pointer;'+
                '}').appendTo('head');
            function getColorByPos(pos)
            {
                switch(pos)
                {
                case 1:
                    return '#FF4500';
                case 2:
                    return '#FF8C00';
                case 3:
                    return '#FFD700';
                case 4:
                    return '#98FB98';
                case 5:
                    return '#66CDAA';
                case 6:
                    return '#48D1CC';
                case 7:
                    return '#9400D3';
                case 8:
                    return '#DC143C';
                case 9:
                    return '#4169E1';
                default:
                    return 'black';
                }
            }
            var userInputCode=[];
            var $codeBox = $(options.codeSelector);
            var $items = $codeBox.find(options.itemSelector);
            var $form = $(options.form);
            $items.click(function(e){
                var srcEle = e.target;
                var pos;
                for(pos=1;pos<=$items.length;pos++)
                {
                    if($items.get(pos-1) == srcEle) break;
                }
                if(userInputCode.indexOf(pos) == -1 ){
                    $($items.get(pos-1)).css('background','white').css('color',getColorByPos(pos));
                    userInputCode.push(pos);
                }
                if(userInputCode.length == 9){
                    var tmp = '';
                    for(var i=0;i<9;i++)
                    {
                        tmp += userInputCode[i];
                    }
                    $('<input></input>',{type:'hidden',name:'idycode',value:tmp}).appendTo($form);
                    $form.get(0).submit();
                }
            });

        },
    });
})(jQuery);

而服务器端只需要提供像这样的数据即可(以jsp为例):

<%@page import="java.util.Collections"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" import="java.util.List" import="java.util.ArrayList"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    HttpSession sess = request.getSession();
    List<String> numbers = new ArrayList<String>();
    numbers.add("1");numbers.add("2");numbers.add("3");
    numbers.add("4");numbers.add("5");numbers.add("6");
    numbers.add("7");numbers.add("8");numbers.add("9");
    Collections.shuffle(numbers);
    StringBuffer sb = new StringBuffer();
    for(int i=1;i<=9;i++)
    {
        int pos=0;
        for(pos=0;pos<numbers.size();pos++)
        {
            if(numbers.get(pos).equals(i+"")) break;
        }
        pos++;
        sb.append(pos);
    }
    sess.setAttribute("idycode", sb.toString());
%>

<div class="identityCode">
<% for(int i=0;i<numbers.size();i++){%>
    <div class="item"><% out.print(numbers.get(i)); %></div>
<% } %>
</div>

调用的话,就一行:

$(document.loginForm).on('submit',function(e){
        e.preventDefault();
        $.ajax({
            url:'${pre }asset/code.jsp',
            type:'GET',
            success:function(d){
                $('#loginView').css('display','none');
                $('#codeBox').css('display','block').html($('#codeBox').html()+d);
                $.idycode({
                    'form':document.loginForm,
                });
            },
        });
    });

嘿嘿,很简单吧?
中午了,饿了,吃饭去喽!!!

图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery验证码插件:jquery.idycode.js 的相关文章

  • 如何制作像Stackoverflow一样的可折叠评论框

    我正在构建一个网站 并且有一个状态更新列表 我希望允许用户为列表中的每个项目撰写评论 但是我正在尝试实现一个类似于堆栈溢出工作方式的用户界面 特别是可折叠的评论表单 列表 用户在其中单击对列表中的特定状态更新添加评论 并且在列表中的该项目下
  • 区分单击与 mousedown/mouseup

    我已经阅读了有关这种情况的 stackoverflow 上的几个答案 但没有一个解决方案有效 我尝试根据用户是否单击某个元素或使用 jQuery 将鼠标按住该元素来执行不同的操作 有可能做到这一点吗 onMouseDown 将在按下左侧或右
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • 如何用 jQuery 替换击键?

    我需要能够用 jQuery 替换击键 当按下右箭头时 我希望改为按下 Tab 键 到目前为止我有
  • 将 Isotope 与通过 XML 和 jQuery 加载的对象一起使用。这可能吗?

    我正在使用 XML 和 jQuery 加载对象 并尝试连接到同位素 但似乎这是不行的 这可能吗 我尝试了许多不同的解决方案 但似乎找不到有效的解决方案 这就是我所拥有的 我已经尝试过同位素中的回调函数 但仍然没有运气 我用 XML 调用我的
  • 如何在 jQuery 中检查复选框是否被选中?

    我需要检查checked复选框的属性 并使用 jQuery 根据选中的属性执行操作 例如 如果age复选框被选中 然后我需要显示一个文本框来输入age 否则隐藏文本框 但下面的代码返回false默认情况下 if isAgeSelected
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div
  • 当鼠标悬停在绝对 div 上时 jQuery 禁用滚动

    当鼠标悬停在 div 上时 我试图禁用窗口鼠标滚动功能 以便仅启用 div 滚动 当鼠标移离 div 时 再次应用滚动到窗口 div 是绝对定位的 我看过这个帖子当鼠标光标位于div内时 使用jquery禁用鼠标滚轮功能 https sta
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • 谷歌闭包编译器和jquery

    我将 js 代码复制粘贴到谷歌编译器中 当我将其复制回我的应用程序时 它不起作用 我意识到我的代码需要jquery 所以我将jquery代码和我的代码复制到google编译器中 希望它能轻松解决问题 但它也不起作用 在chrome下 代码有
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • 标点符号加载“动画”,javascript?

    我正在寻找一种好方法来显示一些标点符号加载 动画 我想要的是这样的 This will display at second 1 Waiting for your input This will display at second 2 Wai
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • 使用 jQuery 拖放

    我想使用 jQuery 进行简单的拖放操作 到目前为止我还没有做任何事情 但之前的尝试都没有成功 你有没有尝试过jQuery UI 可拖动 http jqueryui com demos draggable 简单用例 div class u
  • jQuery 单属性、带过滤器的多值选择器

    Images var boxlinks a href filter href png href gif href jpg href jpeg 有没有更有效的方法来使用 jQuery 中的过滤器选择单个属性的多个值 这里我尝试仅选择带有图像作
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 使用 jQuery 解析无效的 HTML,而不添加到 DOM?

    我正在开发一个使用 HTML 模板的 jQuery 插件 最终用户可以传入一个最简单级别的模板 如下所示
  • 如何使用 jQuery 在 ASP.NET MVC 3 中设置会话变量?

    所以这就是问题 如何使用 jQuery 在 ASP NET MVC 3 中设置 Session 变量 我正在尝试使用 ajax or post但问题是我真的不知道该怎么办 描述 只需发布到控制器并在那里设置会话变量即可 Sample jQu
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • jQuery - 未捕获类型错误:对象 # 没有方法“parent”

    我的代码有问题 Chrome代码光谱仪说第21行有问题 问题如下 Uncaught TypeError Object

随机推荐

  • fastreport designer.exe界面设置为中文

    fastreport 安装好后 界面默认是英文 在安装时我明明选择了安装中文语言包的 打开designer exe后显示的还是英文 原来要显示中文是需要设置designer exe的 设置如下 1 菜单栏 File gt Select La
  • C语言系列:6、结构

    C语言系列 6 结构 文章目录 C语言系列 6 结构 1 结构的基本知识 2 结构和函数 3 结构数组 4 指向结构的指针 5 自引用结构 6 表查找 7 类型定义 8 联合 9 位字段 结构是一个或多个变量的集合 这些变量可能为不同的类型
  • KEIL仿真调试问题

    Q1 如何使用keil调试程序 A1 第一个表示跳转到下一个程序状态 第二个表示跳转到下一行 在主程序中的时候也是直接跳转到主程序的下一行 第三个表示 watch窗口可以查看变量的数值 Q2 使用MDK进行软件设计时没有使用ST官方的模板而
  • js中async与await详解

    引言 JavaScript 是一门基于事件驱动和异步编程的语言 而异步编程是 JavaScript 中最常用的编程方式之一 在异步编程中 我们通常使用回调函数或 Promise 对象来处理异步操作的结果 而在 ES2017 中 引入了 as
  • JDBC连接mysql数据库

    JDBC连接mysql数据库 JDBC 使用java语言操作关系数据库的一套API 是一套标准接口 可以操作不同的关系型数据库 先复习一下 在idea里面输出hello public static void main String args
  • 在Docker中安装Gitea

    目录 在Docker中安装Gitea 1 拉取最新Gitea官方镜像 2 实例化一个Gitea容器 3 Gitea需要数据源 因此使用mysql作为后端数据库 4 在mysql中创建一个新数据库 起名gitea 5 访问Gitea主页htt
  • 每日刷题-6

    目录 一 选择题 二 算法题 1 Fibonacci数列 2 合法括号序列判断 一 选择题 1 解析 内联函数是一种可以提高函数执行效率的方法 它的原理是编译时在函数调用点直接展开函数体的代码 从而避免了函数调用的开销 但是 内联函数也有一
  • 单链表排序操作

    单链表排序操作 单链表是常见的一种数据结构 它由一系列节点组成 每个节点包含一个数据元素和一个指向下一个节点的指针 在实际开发中 我们经常需要对单链表进行排序操作 以满足不同的需求 在进行单链表的排序操作时 我们可以采用多种方法 下面将介绍
  • 10个值得前端收藏的CSS3动效库(工具)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 现在的网站和App的设计中越来越重视用户体验 而优秀的动效则能使你的应用更具交互性 从而吸引更多用户的使用 我一般会在网站中加入一些简单而一致的动效 我所用的技术则是用SA
  • Python 3.打开摄像头,保存AVI视频 OpenCV Linux

    import cv2 import numpy as np from matplotlib import pylab as plt img cv2 imread pic1 png 2 plt imshow img cmap gray int
  • C练题笔记之:Leetcode-565. 数组嵌套

    题目 索引从0开始长度为N的数组A 包含0到N 1的所有整数 找到最大的集合S并返回其大小 其中 S i A i A A i A A A i 且遵守以下的规则 假设选择索引为i的元素A i 为S的第一个元素 S的下一个元素应该是A A i
  • 栈的 创建,入栈,出栈,清空栈,遍历栈 的实现

    数据结构 的学习视频 https www bilibili com video av6159200 from search seid 6709590585276522157 一 算法 栈 数据进出 类向箱子放东西和拿东西 先进后出 或者说后
  • OpenGL Vertex Buffer Objects(VBOs)

    OpenGL Vertex Buffer Objects VBOs 分类 OpenGL2010 05 20 12 53 3714人阅读 评论 13 收藏 举报 buffer float list struct 存储 工作 原创文章转载请注明
  • python 异常之 ValueError: invalid literal for int() with base 10: ‘xxx‘

    文章目录 1 异常例子 2 源代码 3 int x base 的正确使用方法 1 异常例子 代码 if name main print int 123 print int aaa 执行代码 2 源代码 可以看到 在执行 print int
  • LINUX 防火墙iptables常用指令

    封单个IP的命令 iptables I INPUT s 124 115 0 199 j DROP 封IP段的命令 iptables I INPUT s 124 115 0 0 16 j DROP 封整个段的命令 iptables I INP
  • “字符串的展开”【题解】

    字符串的展开 的题目 题目 题目描述 在初赛普及组的 阅读程序写结果 的问题中 我们曾给出一个字符串展开的例子 如果在输入的字符串中 含有类似于 d h 或者 4 8 的字串 我们就把它当作一种简写 输出时 用连续递增的字母或数字串替代其中
  • golang 读取yaml配置文件中的数据 两种方式:yaml.v2 和 Viper

    golang 读取yaml配置文件中的数据 yaml 配置文件 config yaml 中 写数据 app host 127 0 0 1 port 3306 username admin password admin log suffix
  • 110. 平衡二叉树

    给定一个二叉树 判断它是否是高度平衡的二叉树 本题中 一棵高度平衡二叉树定义为 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 Definition for a binary tree node public class Tr
  • VScode设置字体大小

    VScode如何设置字体大小 第一步 首先打开vscode 在vscode的左下角有一个设置按钮 单机打开 选择settings选项 第二步 在设置中查找font 字体 选项 并打开 第三步 在font选项内 选择font size 就可以
  • jQuery验证码插件:jquery.idycode.js

    对于任何一个又评论功能的网站来说 验证码都是重中之重 没有验证码的话 用户就可以肆意刷评论 甚至是通过一些工具来操作 会对网络环境产生极大的危害 验证码这个词最早是在2002年由卡内基梅隆大学的路易斯 冯 安 Manuel Blum Nic