一般验证码页面只输出一个图片而不进行其他业务处理,所以验证码一般放在一般处理程序(httpHandler)页面中,而如果将验证码生成代码放到一般处理程序中,要将生成验证码保存在Session中,这里我们假设保存到session["ValidCode"]中,则需要添加对 System.Web.SessionState 命名空间的引用,并要实现 IHttpHandler和IRequiresSessionState接口,这样才能实现将验证码保存到session中,生成验证码示例代码如下:

 using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Web;
using System.Web.SessionState; namespace 验证码的生成与识别
{
/// <summary>
/// 生成验证码
/// </summary>
public class ValidCodeHandler : IHttpHandler,IRequiresSessionState
{ public void ProcessRequest(HttpContext context)
{
// 产生5位随机字符
string strValidCode = GetValidCode(); //如果要使用context.Session,需要添加命名空间System.Web.SessionState using System.Web.SessionState; ,然后再继承IRequiresSessionState接口
//将字符串保存到Session中,以便需要时进行验证
context.Session["ValidCode"] = strValidCode;
//定义宽120像素,高30像素的数据定义的图像对象
Bitmap image = new Bitmap(, );
//绘制图片
Graphics g = Graphics.FromImage(image);
try
{
//创建随机数生成器
Random random = new Random();
//清除图片背景色
g.Clear(Color.White);
// 随机产生图片的背景噪线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
//设置图片字体风格
Font font = new System.Drawing.Font("微软雅黑", , (System.Drawing.FontStyle.Bold));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Blue, Color.DarkRed, , true);//设置画笔类型
//绘制随机字符
g.DrawString(strValidCode, font, brush, , );
//绘制图片的前景噪点
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
//建立存储区为内存的流
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//将图像对象储存为内存流
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//清除当前缓冲区流中的所有内容
context.Response.ClearContent();
//设置输出流的MIME类型
context.Response.ContentType = "image/png";
//将内存流写入到输出流
context.Response.BinaryWrite(ms.ToArray());
}
finally
{
//释放资源
g.Dispose();
image.Dispose();
}
} /// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="num">随机字符的个数</param>
/// <returns>返回随机产生的字符串</returns>
private string GetValidCode(int num)
{
//定义一个允许的字符组成的字符串
string strRandomCode = "ABCD1EF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ"; //定义要随机抽取的字符串
//char[] chaStr = strRandomCode.ToCharArray(); //第二种方法:将定义的字符串转成字符数组
StringBuilder sbValidCode = new StringBuilder(); //定义StringBuilder对象用于存放验证码
//随机数生成器,用于随机产生验证码中字符
Random rnd = new Random(); //随机函数,随机抽取字符
for (int i = ; i < num; i++)
{
//随机获取一个字符
char a = strRandomCode[rnd.Next(, strRandomCode.Length)];
//拼接字符
sbValidCode.Append(a);
}
return sbValidCode.ToString();
} public bool IsReusable
{
get
{
return false;
}
}
}
}

生成验证码

  生成验证码之后,就是用户的输入与验证码的对比,刚才我们已经将验证码保存到session中,检查用户输入的验证码是否正确只需将用户输入值与保存到session中的值即【session["ValidCode"].ToString()】(类型转换,session["ValidCode"]转化为string类型)比较即可,我们可以在code页面验证,也可在一般处理程序中验证(更为常用,可利用Ajax技术,提高用户体验),

  code验证示例代码:

 //判断用户输入验证码与保存在session中验证码是否一致
if (txtValidCode.Text.ToUpper() == Session["Code"].ToString().ToUpper())

Code页验证

  一般处理程序示例代码如下:

 using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState; namespace 验证码的生成与识别
{
/// <summary>
/// 验证用户输入验证码是否正确
/// </summary>
public class Handler1 : IHttpHandler,IRequiresSessionState
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//获取用户输入验证码
string strCode = context.Request["txtValidCode"].ToString();
//ToUpper(),这里验证码不区分大小写
if (strCode.ToUpper() == context.Session["ValidCode"].ToString().ToUpper())
{
context.Response.Write("验证码正确!");
}
else
{
context.Response.Write("验证码错误!");
}
} public bool IsReusable
{
get
{
return false;
}
}
}
}

httpHandler验证

ASP.NET验证码生成与识别的更多相关文章

  1. 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  2. 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别

    验证码的生成与识别 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html 目录 1.验证码的制 ...

  3. ASP.NET MVC生成安全验证码

    html部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. .net验证码生成及使用

    验证码的作用: 几年前,大部分网站.论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验.但是后来各种灌水机器人.投票机器人.恶意注册机器人层出不穷,大大增加了网 ...

  5. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  6. Atitit 图片 验证码生成attilax总结

    Atitit 图片 验证码生成attilax总结 1.1. 图片验证码总结1 1.2. 镂空文字  打散 干扰线 文字扭曲 粘连2 1.1. 图片验证码总结 因此,CAPTCHA在图片验证码这一应用点 ...

  7. ASP.net 验证码(C#) MVC

    ASP.net 验证码(C#) MVC http://blog.163.com/xu_shuhao/blog/static/5257748720101022697309/ 网站添加验证码,主要为防止机 ...

  8. JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html    另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...

  9. python登录验证码生成及自动化测试规避

    在用django写论坛的时候,需要有登录及注册功能. 故就登录界面后端需要生成随机验证码并传值给前端的代码进行编写如下. 验证码生成png需要调用到python的图形库 生成注册码img import ...

随机推荐

  1. mysql日期类型默认值'0000-00-00'容错处理

    mysql日期默认值'0000-00-00'惹的祸 .net连mysql数据库时,如果表里有字段是日期型且值是‘0000-00-00’时,会报错.在C#里面日期不可能是那样的.或许是最小日期定义的差别 ...

  2. [Sql Server2008]树结构的递归算法

    http://blog.csdn.net/tonyzhou2008/article/details/5100683 本文主要讲述三个内容: 1.如何创建hierarychyid的表,插入数据及基本递归 ...

  3. Powerdesigner逆向工程从sql server数据库生成pdm (转载)

    第一步:打开"控制面板"中的"管理工具" 第二步:点击"管理工具"然后双击"数据源(odbc)" 第三步:打开之后,点击 ...

  4. 【转载】Linux之gdb

    转载自:http://blog.chinaunix.net/uid-22312037-id-3812061.html 一.常规调试         gdb是Linux下常用的程序调试工具,当然前提是用 ...

  5. Hadoop入门进阶课程5--MapReduce原理及操作

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  6. Hadoop第8周练习—Pig部署及统计访问日志例子

    :搭建Pig环境 :计算每个IP点击次数 内容 运行环境说明 1.1     硬软件环境 线程,主频2.2G,6G内存 l  虚拟软件:VMware® Workstation 9.0.0 build- ...

  7. E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

    安装terminator等一些软件等时候,遇到了这样等问题 leo@leo:~$ sudo apt-get install terminator [sudo] password for leo: 正在 ...

  8. 参数嗅探(Parameter Sniffing)(2/2)

    在参数嗅探(Parameter Sniffing)(1/2)里,我介绍了SQL Server里参数嗅探的基本概念和背后的问题.如你所见,当缓存的计划被SQL Server盲目重用时,会带来严重的性能问 ...

  9. CSS布局 -- 左侧定宽,右侧自适应

    左侧定宽,右侧自适应 有很多种方法可以实现 缩小窗口试试看? 方案一: 左边左浮动,右边加个margin-left 查看 demo <!DOCTYPE html PUBLIC "-// ...

  10. MVC应用程序结构与规划

    对MVC好长一段时间练习,说句实在的话,还有很多是感到陌生,很多是生疏...... 很多网友也是刚想学习MVC,看到Insus.NET每学习一种方法,一个技巧均写成博文,也很希望能获取到练习的源程序以 ...