JS结合Cookie实现验证码功能

验证码功能是现在网站开发中非常常见的一种功能,常见的编程语言,比如.NET,JAVA都能很容易实现验证码功能,今天我准备分享一个使用JS实现验证码的功能,非常简单使用,拿来就可以用,废话不多说,直接上传代码!

JS代码:

//生成验证码
var code = "";
function createCode(e) {code = "";var codeLength = 4;var selectChar = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');for (var i = 0; i < codeLength; i  ) {var charIndex = Math.floor(Math.random() * 60);code  = selectChar[charIndex];}if (code.length != codeLength) {createCode(e);}if (canGetCookie == 1) {setCookie(e, code, 60 * 60 * 60, '/');} else {return code;}
}
存储验证码到Cookie:

//hours为空字符串时,cookie的生存期至浏览器会话结束。  
//hours为数字0时,建立的是一个失效的cookie,  
//这个cookie会覆盖已经建立过的同名、同path的cookie(如果这个cookie存在)。     
function setCookie(name, value, hours, path) {var name = escape(name);var value = escape(value);var expires = new Date();expires.setTime(expires.getTime()   hours * 3600000);path = path == "" ? "" : ";path="   path;_expires = (typeof hours) == "string" ? "" : ";expires="   expires.toUTCString();document.cookie = name   "="   value   _expires   path;
}
从Cookie获取验证码:

//cookie名获取值  
function getCookieValue(name) {var name = escape(name);//读cookie属性,这将返回文档的所有cookie     var allcookies = document.cookie;//查找名为name的cookie的开始位置     name  = "=";var pos = allcookies.indexOf(name);//如果找到了具有该名字的cookie,那么提取并使用它的值     if (pos != -1) {    //如果pos值为-1则说明搜索"version="失败     var start = pos   name.length;   //cookie值开始的位置     var end = allcookies.indexOf(";", start); //从cookie值开始的位置起搜索第一个";"的位置,即cookie值结尾的位置     if (end == -1) end = allcookies.length; //如果end值为-1说明cookie列表里只有一个cookie     var value = allcookies.substring(start, end);  //提取cookie的值     return unescape(value);       //对它解码           }else return "-1";    //搜索失败,返回-1  
}  
前端使用:

1.html代码:

      <div class='validation' style="opacity: 1; right: -5px;top: -3px;"><canvas class="J_codeimg" id="myCanvas" onclick="Code();">对不起,您的浏览器不支持canvas,请下载最新版浏览器!</canvas></div>
2.JS代码:

Code();function Code() {showCheck(createCode("test"));}function showCheck(a) {CodeVal = a;var c = document.getElementById("myCanvas");var ctx = c.getContext("2d");ctx.clearRect(0, 0, 1000, 1000);ctx.font = "80px 'Hiragino Sans GB'";ctx.fillStyle = "#E8DFE8";ctx.fillText(a, 0, 100);}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建基于密码的加密密钥

本文讨论了创建基于密码的加密PBE密钥。 首先提醒您以前的要点–通常&#xff0c;在实际操作中&#xff0c;应将PBE密钥用作主密钥&#xff0c;该主密钥仅用于解锁工作密钥。 这具有三个主要优点&#xff1a; 您可以有多个密码&#xff0c;例如&#xff0c;托管的恢复密钥&am…

php-5.6.26源代码 - PHP文件汇编成opcode、执行

文件 php-5.6.26/Zend/zend.c ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...) /* {{{ */ {va_list files;int i;zend_file_handle *file_handle;zend_op_array *orig_op_array EG(active_op_array); // 保存现场&#xff0c;操作…

java1a2b3c4d5e6f_用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D...26Z...

用两个线程&#xff0c;一个输出字母&#xff0c;一个输出数字&#xff0c;交替输出1A2B3C4D...26Z方法一public class Test {static Thread t1 null, t2 null;public static void main(String[] args) {char[] aI "1234567".toCharArray();char[] aC "ABCD…

js如何设置浏览器全屏效果?

现在很多网页游戏进入游戏界面后都是全屏显示的效果&#xff0c;很多人问我这个要怎么实现&#xff0c;其实这个只要调用Fullscreen API就可以实现了作为一个比较新的 API&#xff0c;目前只有 Safari、Chrome 和 FireFox以及IE10以上的浏览器才支持该特性。因为尚未发布正式版…

6759: 异或序列

6759: 异或序列 时间限制: 1 Sec 内存限制: 128 MB题目描述 已知一个长度为n的整数数列a1,a2,…,an&#xff0c;给定查询参数l、r&#xff0c;问在al,al1,…,ar区间内&#xff0c;有多少子序列满足异或和等于k。也就是说&#xff0c;对于所有的x,y(l≤x≤y≤r)&#xff0c;满足…

Neo4j Java REST绑定–第2部分(批处理)

在第1部分中 &#xff0c;我们讨论了使用Java REST绑定建立与Neo4j Server的连接。 现在让我们详细了解事务&#xff0c;批处理以及REST请求的实际情况。确保org.neo4j.rest.logging_filter to true) as described in Part 1打开日志记录&#xff08;将系统属性org.neo4j.rest.…

selector简介

最近在学习java NIO&#xff0c;发现java nio selector 相对 channel ,buffer 这两个概念是比较难理解的 ,把学习理解的东西以文字的东西记录下来&#xff0c;就像从内存落地到硬盘&#xff0c;把内存中内容换成该知识点的索引。 在介绍Selector之前先明确以下3个问题&#…

java随机数排序算法_理解快速排序算法

快速排序在平均状况下&#xff0c;排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n^2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比 其他Ο(n log n)算法更快&#xff0c;因为它的内部循环(inner loop)可以在大部分的架构上很有效率地…

开课吧视频内容汇总

1. 前端读取文件内容&#xff0c; FileReader对象 2. 用户联网状态 3. application/x-www-form-urlencoded 参数序列化 &#xff08;具体借鉴jquery的$.param方法&#xff09;&#xff0c;后端接收到的数据格式是 a[0][a] 1,并不会将其整理成对象或者数组 var nextStr ;funct…

PhantomJS宣布终止开发

由于没有人贡献代码&#xff0c;我很快就要把这个项目归档了。也许未来的某一天&#xff0c;我又想开发了&#xff0c;还会重新启动起来。既然决定停止开发了&#xff0c;那么自然地&#xff0c;PhantomJS 2.5 和原定的 PhantomJS2.1.x 就告吹了。对应的&#xff0c;这两个版本…

Servlet和JSP中的文件上传示例

使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务。 在对Servlet或JSP进行编码以处理文件上传请求之前&#xff0c;您需要了解一点有关HTML和HTTP协议中文件上传支持的知识。 如果要让用户从文件系统中选择文件并上传到服务器&#xff0c;则需要使用<inpu…

20165312-第4周-课上内容补做以及知识点总结

20165312-第4周-课上内容补做以及知识点总结 1、课上内容补做 教材代码完成情况测试p45这题很快就做完了&#xff0c;然后忘记提交了。。就开始做递归。想起来的时候已经过了时间。 public class Example3_7 {public static void main(String args[]) {int sum0,i,j;for(i1;i&l…

java入门就是死敲代码吗_JAVA入门第二季综合练习(直接思考敲的代码,面向过程,不好)...

package com.imocc;/*author ndh2016年3月27日 21:03:02*/import java.util.Scanner;public class DiDi {public static void main(String[] args){Scanner sc new Scanner(System.in);System.out.println("欢迎使用迪迪租车系统&#xff01;");System.out.println(…

JavaScript实现表单的全选,反选,获取值

构思 通过for循环和for in循环来实现&#xff0c;界面效果如下 步骤 全选&#xff1a; 循环给所有的表单设置checked 反选&#xff1a; 循环内判断checked是否为true&#xff0c;如果为true则改为false否则改为true 获取值&#xff1a; 最开始用for取&#xff0c;但是只打印最后…

jQuery.extend() 使用语法详解

今天在写插件&#xff0c;使用$.extend({}, defaults, options)的时候发现漏写了 {}&#xff0c;浪费了一些时间&#xff0c; 所以详细记录下该方法的 API 和使用。API 如下&#xff1a;jQuery.extend( [ deep ], target, [ object1 ], [ objectN ] )描述&#xff1a;合并两个或…

EJB钝化和激活示例

在本教程中&#xff0c;我们将了解状态Java企业会话Bean中激活和钝化的工作方式。 1.简介 有状态会话Bean通常保存有关特定客户端的信息&#xff0c;并在整个会话中保存该信息。 但是&#xff0c;事实是&#xff0c;客户端会话往往会在相当长的时间内保持活动状态&#xff0c;…

Python进阶_面对对象面对过程

这节主要讲面对对象与面对过程两种编程思想的主要区别。 一. 简单对比 面向过程是一种基础的方法&#xff0c;它考虑的是实际的实现步骤&#xff0c;一般情况下&#xff0c;面向过程是自顶向下逐步求精&#xff0c;其最重要的是模块化的思想方法。 面向对象的方法主要是把事物给…

puppet 安装mysql_Puppet安装dashboard

Puppet安装dashboard安装依赖包[rootmaster ~]# sudo yum install -y mysql mysql-devel mysql-server ruby ruby-devel ruby-irb ruby-mysql ruby-rdoc ruby-ri启动mysql并设置开机启动[rootmaster ~]# service mysqld start [rootmaster ~]# chkconfig mysqld on下载并安装…

命令模式详解

原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html 在阎宏博士的《JAVA与模式》一书中开头是这样描述命令&#xff08;Command&#xff09;模式的&#xff1a; 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模…

JDK 8中几乎命名的方法参数

有时在Java中命名方法参数确实很不错&#xff0c;这看起来可能不会出现很长时间了&#xff0c;但是始终还有其他一些解决方法&#xff0c;例如使用构建器模式来获得类似的行为&#xff0c;这将为一点点。 在我看来&#xff0c;使用JDK 8中的Lambda支持可以使您获得非常接近的效…