ajax使用验证码,JQuery+AJax - 无刷新使用验证码

最终效果:

12bb469888d78c3b80648a862aad5577.png

项目目录:

88dd8f88f29a4426628482c367662d73.png

Default.aspx前端代码:

$(document).ready(function () {

$("#getimgcode").click(function () {

var imgSrc = $("#getcode");

var src = imgSrc.attr("src");

imgSrc.attr("src", chgUrl(src));

$("#info").html("");//同时清空提示信息。

})

//时间戳

//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳

function chgUrl(url) {

var timestamp = (new Date()).valueOf();

url = url.substring(0, 15);

if ((url.indexOf("&") >= 0)) {

url = url + "×tamp=" + timestamp;

} else {

url = url + "?timestamp=" + timestamp;

}

return url;

}

//检测验证码

//文本框内容变化事件

$('#myCode').bind('input propertychange', function () {

if ($(this).val().length >= 6) {

//此处作用:实时的检测验证码是否正确。

//要求:但必须要当用户输入第4个字符时,才进行验证。

//原因:因为验证码是四位,所以输入第四个字符时验证,此处也可以用来验证账户名称等等。

var code = $("#myCode").attr("value");

code = "c=" + code;

$.ajax({

type: "POST",

url: "Verify.ashx",

data: code,

success: function (data) {

if (data == "0") {

$("#info").html("Session为空!");

}

if (data == "1") {

$("#info").html("验证码填写错误!");

}

if (data == "2") {

$("#info").html("验证码正确!");

}

}

});

}

else {

$("#info").html("");//如果输入的字符不等于6位清空提示信息。

}

});

})

验证码:

VerifyCode.aspx

看不清?

Default.aspx.cs后台代码:

原始生成,不做修改即可。

VerifyCode.aspx前台代码:

原始生成,不做修改即可。

VerifyCode.aspx.cs后台代码:

using System;

using System.Drawing;

using System.Web;

public partial class VerifyCode : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

validatedCode v = new validatedCode();

string code = v.CreateVerifyCode(); //取随机码

v.CreateImageOnPage(code, this.Context); // 输出图片

Session["CheckCode"] = code; //创建Session

}

public class validatedCode

{

#region 验证码长度(默认6个验证码的长度)

int length = 6;

public int Length

{

get

{

return length;

}

set

{

length = value;

}

}

#endregion

#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)

int fontSize = 50;

public int FontSize

{

get

{

return fontSize;

}

set

{

fontSize = value;

}

}

#endregion

#region 边框补(默认1像素)

int padding = 2;

public int Padding

{

get

{

return padding;

}

set

{

padding = value;

}

}

#endregion

#region 是否输出燥点(默认不输出)

bool chaos = true;

public bool Chaos

{

get

{

return chaos;

}

set

{

chaos = value;

}

}

#endregion

#region 输出燥点的颜色(默认灰色)

Color chaosColor = Color.LightGray;

public Color ChaosColor

{

get

{

return chaosColor;

}

set

{

chaosColor = value;

}

}

#endregion

#region 自定义背景色(默认白色)

Color backgroundColor = Color.White;

public Color BackgroundColor

{

get

{

return backgroundColor;

}

set

{

backgroundColor = value;

}

}

#endregion

#region 自定义随机颜色数组

Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

public Color[] Colors

{

get

{

return colors;

}

set

{

colors = value;

}

}

#endregion

#region 自定义字体数组

string[] fonts = { "Arial", "Georgia" };

public string[] Fonts

{

get

{

return fonts;

}

set

{

fonts = value;

}

}

#endregion

#region 自定义随机码字符串序列(使用逗号分隔)

string codeSerial = "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";

public string CodeSerial

{

get

{

return codeSerial;

}

set

{

codeSerial = value;

}

}

#endregion

#region 产生波形滤镜效果

private const double PI = 3.1415926535897932384626433832795;

private const double PI2 = 6.283185307179586476925286766559;

///

/// 正弦曲线Wave扭曲图片(Edit By 51aspx.com)

///

/// 图片路径

/// 如果扭曲则选择为True

/// 波形的幅度倍数,越大扭曲的程度越高,一般为3

/// 波形的起始相位,取值区间[0-2*PI)

///

public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)

{

System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);

// 将位图背景填充为白色

System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);

graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);

graph.Dispose();

double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;

for (int i = 0; i < destBmp.Width; i++)

{

for (int j = 0; j < destBmp.Height; j++)

{

double dx = 0;

dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;

dx += dPhase;

double dy = Math.Sin(dx);

// 取得当前点的颜色

int nOldX = 0, nOldY = 0;

nOldX = bXDir ? i + (int)(dy * dMultValue) : i;

nOldY = bXDir ? j : j + (int)(dy * dMultValue);

System.Drawing.Color color = srcBmp.GetPixel(i, j);

if (nOldX >= 0 && nOldX < destBmp.Width

&& nOldY >= 0 && nOldY < destBmp.Height)

{

destBmp.SetPixel(nOldX, nOldY, color);

}

}

}

return destBmp;

}

#endregion

#region 生成校验码图片

public Bitmap CreateImageCode(string code)

{

int fSize = FontSize;

int fWidth = fSize + Padding;

int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;

int imageHeight = fSize * 2 + Padding;

System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight);

Graphics g = Graphics.FromImage(image);

g.Clear(BackgroundColor);

Random rand = new Random();

//给背景添加随机生成的燥点

if (this.Chaos)

{

Pen pen = new Pen(ChaosColor, 0);

int c = Length * 10;

for (int i = 0; i < c; i++)

{

int x = rand.Next(image.Width);

int y = rand.Next(image.Height);

g.DrawRectangle(pen, x, y, 1, 1);

}

}

int left = 0, top = 0, top1 = 1, top2 = 1;

int n1 = (imageHeight - FontSize - Padding * 2);

int n2 = n1 / 4;

top1 = n2;

top2 = n2 * 2;

Font f;

Brush b;

int cindex, findex;

//随机字体和颜色的验证码字符

for (int i = 0; i < code.Length; i++)

{

cindex = rand.Next(Colors.Length - 1);

findex = rand.Next(Fonts.Length - 1);

f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);

b = new System.Drawing.SolidBrush(Colors[cindex]);

if (i % 2 == 1)

{

top = top2;

}

else

{

top = top1;

}

left = i * fWidth;

g.DrawString(code.Substring(i, 1), f, b, left, top);

}

//画一个边框 边框颜色为Color.Gainsboro

g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);

g.Dispose();

//产生波形(Add By 51aspx.com)

image = TwistImage(image, true, 8, 4);

return image;

}

#endregion

#region 将创建好的图片输出到页面

public void CreateImageOnPage(string code, HttpContext context)

{

System.IO.MemoryStream ms = new System.IO.MemoryStream();

Bitmap image = this.CreateImageCode(code);

image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

context.Response.ClearContent();

context.Response.ContentType = "image/Jpeg";

context.Response.BinaryWrite(ms.GetBuffer());

ms.Close();

ms = null;

image.Dispose();

image = null;

}

#endregion

#region 生成随机字符码

public string CreateVerifyCode(int codeLen)

{

if (codeLen == 0)

{

codeLen = Length;

}

string[] arr = CodeSerial.Split(',');

string code = "";

int randValue = -1;

Random rand = new Random(unchecked((int)DateTime.Now.Ticks));

for (int i = 0; i < codeLen; i++)

{

randValue = rand.Next(0, arr.Length - 1);

code += arr[randValue];

}

return code;

}

public string CreateVerifyCode()

{

return CreateVerifyCode(0);

}

#endregion

}

}

Veify.ashx代码:

其中如果要在一般处理程序中能使用 Session 的话。

要  using System.Web.SessionState;  。

并继承  IRequiresSessionState  接口。

using System;

using System.Web;

using System.Web.SessionState;

public class Handler : IHttpHandler, IRequiresSessionState {

public void ProcessRequest (HttpContext context) {

context.Response.ContentType = "text/plain";

string VerifyCode = context.Request.Form["c"];

if (context.Session["CheckCode"] == null)

{

context.Response.Write("0");//session为空!

}

else

{

string Verifycode = context.Session["CheckCode"].ToString().ToUpper();

if (Verifycode != VerifyCode.ToUpper())

{

context.Response.Write("1");//验证码填写错误!

}

else

{

context.Response.Write("2");//验证码正确!

}

}

}

public bool IsReusable {

get {

return false;

}

}

}

JQUERY AJAX无刷新异步上传文件

AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery For ...

jQuery Ajax无刷新操作

下面是“无刷新登录”的例子,采用Ashx+jQuery Ajax实现. //后台实例代码 ashx文件(可替换为从数据库中读取) public void ProcessRequest(HttpCont ...

LigerUi框架&plus;jquery&plus;ajax无刷新留言板系统的实现

前些天发布了LigerUi框架的增.删.改代码,一堆代码真的也没一张图片.有的网友推荐上图,所有今天把涉及到这个框架的开源的留言板共享给大家.在修改的过程中可能有些不足的地方希望大家拍砖. 因为留言板 ...

jQuery Ajax无刷新操作一般处理程序 ashx

//前台实例代码 aspx文件

jquery&plus;ajax无刷新加载数据,新闻浏览更多

jquery ajax 无刷新上传

var form = new FormData(); form.append('file', $("#submitmaterials").find("input&quot ...

jQuery实现form表单基于ajax无刷新提交方法详解

本文实例讲述了jQuery实现form表单基于ajax无刷新提交方法.分享给大家供大家参考,具体如下: 首先,新建Login.html页面: quo ...

Ajax&period;BeginForm&lpar;&rpar;实现ajax无刷新提交

1. 同时安装 Microsoft jQuery Unobtrusive ajax 和 jQuery Unobtrusive Ajax,如下图 安装完成之后多了如下的js库 2. 引用该js库 lay ...

thinkphp ajax 无刷新分页效果的实现

思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

随机推荐

Java程序员岗位

Java程序员岗位面试题有哪些?   1.面向对象的特征有哪些方面(1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择 ...

Oracle的多表查询

多表查询概念: 所谓多表查询,又称表联合查询,即一条语句涉及到的表有多张,数据通过特定的连接进行联合显示. 基本语法: select column_name,.... from table1,tabl ...

ContentType Office

Office对应ContentType 当从浏览器返回一个文件时,需要指定ContentType,以下是Office2007对应的值: "application/vnd.openxmlfor ...

select into from 和 insert into select 的用法和区别&lpar;转&rpar;

转自:http://www.studyofnet.com/news/182.html select into from 和 insert into select都是用来复制表,两者的主要区别为: se ...

CentOS6&period;5安装pip

首先重要的事情说三遍,因为可能有程序依赖目前的python2环境,比如yum: 不要动现有的python2环境! 不要动现有的python2环境! 不要动现有的python2环境! 如果你动了,yum ...

迁移Windows下的MySQL时字符乱码问题

我们常常会直接复制一份MySQL的Data文件夹到新的环境下,正常情况下重新启动MySQL就可以使用.但有时也会遇到些问题: 1.程序訪问时提示找不到表,实际表已经存在 这样的情况是因为数据库全部者可 ...

asp&period;net给文件分配自己主动编号,如【20140710-1】

在开发办公软件的时候,须要给非常多文件什么的东西分配一个编号.是依照日期来的,比方2014.07.10的第一个文件编号就为20140710-1,这一天的第二个文件编号就为20140710-2,以此类推 ...

Redis学习之路(003)- hiredis安装及测试

一. hiredis下载地址及C API  github下载:https://github.com/redis/hiredis 安装脚本: #!/bin/zsh git clone https://g ...

CentOS下Neo4j安装教程

本文记录一下在CentOS 6.7上,安装neo4j图数据库,本文安装的版本为neo4j-community-2.3.9-unix.tar.gz. 下载Neo4j安装包 使用wget命令获取Neo4j ...

SSM-Spring-23:概念《Spring中的事务是什么?》

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客会详细讲述Spring中的事务,会展开来用语言解释,用于了解概念和准备面试 事务的概念: 一个或者一组 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
采用ajax技术实现的图形验证码,在前端进行验证。验证码信息为图片。每一行代码均有注释,通俗易懂。 实现步骤: 1、创建web工程 2、在jsp页面,编写一个 3、编写一个servlet,在servlet中产生图形验证码 ------------------------------------------------------------ //1、给客户端作出的回应是以图片的方式来回应 response.setContentType("image/jpeg"); //2、创建一个图形缓冲区,用于绘制图形 (宽度,高度,颜色的生成方案) BufferedImage image = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB); //3、创建一支画笔(图形设备接口)用于绘图 Graphics g = image.getGraphics(); //4、指定图笔的颜色 g.setColor(getColor(200,256)); //5、绘制一个矩形框,作为验证码的背景 g.fillRect(0,0, 800,600); //产生一个输出流,准备把图片以流的方式,输出到客户端 OutputStream out = response.getOutputStream(); //输出在图形缓冲区中,绘制的图片 ImageIO.write(image,"jpg",out); //关闭流 out.close(); //随机生成背景颜色 private Random rd = new Random(); //产生随机数类 public Color getColor(int start,int end){ int r = start+rd.nextInt(end-start); int g = start+rd.nextInt(end-start); int b = start+rd.nextInt(end-start); return new Color(r, g, b);//根据三原色的值,随机在指定范围内,生成一种颜色 } --------------------------------------------------------------------------- 0-120 比较适合文字的颜色 100-200 适合干扰线条的颜色 200-255 适合背景颜色 --------------------------------------------------------------------------- 生成图片中的文字: 1、先编写一个字符串,包含:数字,大小字母 private String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 2、在产生背景之后,编写如下代码,产生四个字符(并且,把生成字符,保存在session中,在登录的时候用来做判断) String code=""; //用于保存生成的四个字符 for(int i=0;i<4;i++){ //生成一个随机数,它的取值范围,一定要在s这个字符串的长度范围之内 int index = rd.nextInt(s.length()); //2 //把index作为下标,来取得字符串的中某一个字符 char c = s.charAt(index); //指定文字的颜色----深色段 g.setColor(getColor(0,120)); //创建一个字体 Font f = new Font("隶书",Font.ITALIC|Font.BOLD,60+rd.nextInt(60)); //把字体关联到画笔 g.setFont(f); code+=c; //把生成的字符连接成一个字符串 //把文字输出到图片上 g.drawString(String.valueOf(c), 100+i*80+rd.nextInt(100),200+rd.nextInt(150)); } request.getSession().setAttribute("code",code);//把生成的验证码信息,存储到session中,登录的时候,用来作判断 ------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值