using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web.SessionState;
namespace yzm
{
/// <summary>
/// yzm 的摘要说明
/// </summary>
public class yzm : IHttpHandler,IRequiresSessionState
{
private const string yzmName = "yzm"; public void ProcessRequest(HttpContext context)
{ //表头需要修改 MIME类型为:image/jpeg,因为此页面要以图片流的形式响应给客户端
context.Response.ContentType = "image/jpeg"; //获取验证码的内容
string code = CreateCode(context, ); //将内容保存到Seesion,在效验时取客户端提交的值在服务器里与此Session内容验证
context.Session[yzmName] = code; /*
绘制样式
*/
using (Bitmap map =new Bitmap (,)) //创建位图对象,构造函数指定宽、高
using(Graphics grap=Graphics.FromImage(map)) //创建绘图的图纸 {
grap.Clear(Color.White); //让图纸为白色 /*创建一个矩形对象
构造函数(x坐标,y坐标,宽,高)
* 该参数的填写,其实是填满了整个图纸
*/
Rectangle rec = new Rectangle(,,map.Width,map.Height); /*创建了一个画线性,并且颜色是渐变的一个画笔对象
构造函数: 画在矩形对象上,起始颜色,结束颜色,角度,是否比例
*/
using (LinearGradientBrush brush = new LinearGradientBrush(rec,Color.Blue,Color.Red,1.2f,true))
using( Font font = new Font("隶书", , FontStyle.Strikeout)) //为验证码指定字体
{
grap.DrawString(code, font, brush, , ); //画到图纸上,传入相应对象:内容、字体、画笔、坐标
} //画一些随机的直线,增加验证码识别度
Random random = new Random();
for (int i = ; i < ; i++)
{
//第一个点
int x1 = random.Next(map.Width);
int y1 = random.Next(map.Height); //第二个点
int x2 = random.Next(map.Width);
int y2 = random.Next(map.Height); /*在画纸上绘画线
* 构造函数:
* pen:创建画笔(画笔颜色,宽度)
x1, y1, x2, y2 随机生成 两个坐标点连成一条线
*/
grap.DrawLine(new Pen(Color.FromArgb(random.Next()), ), x1, y1, x2, y2); } //保存到响应对象的流中 ,返回给客户端一个jpg格式图片
map.Save(context.Response.OutputStream, ImageFormat.Jpeg); } //--end } /// <summary>
/// 用txt里的汉字作为验证码数据源
/// </summary>
private string Get_yzm_DataSource(HttpContext context)
{
StringBuilder sb = new StringBuilder(); string path = context.Server.MapPath(@"~\yzmDataSource.txt"); using (Stream fs = new FileStream(path, FileMode.Open))
using (StreamReader read = new StreamReader(fs, Encoding.UTF8))
{
string len;
while ((len = read.ReadLine()) != null)
{
Regex rg = new Regex("[\\W\\s]+");
sb.Append(rg.Replace(len, ""));
}
} return sb.ToString();
} /// <summary>
/// 随机生成,指定个数的验证码内容
/// </summary>
/// <returns></returns>
private string CreateCode(HttpContext context, int length)
{
string str = Get_yzm_DataSource(context); Random ran = new Random(); string code = "";
for (int i = ; i < length; i++)
{
int sjIndex = ran.Next(, str.Length);
code += str[sjIndex];
} return code;
} public bool IsReusable
{
get
{
return false;
}
}
}
}

使用GDI技术创建ASP.NET验证码的更多相关文章

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

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

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

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

  3. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)

    前言 大家好,我是Rector 从今天开始,Rector将为大家推出一个关于创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar]的文章系列, ...

  4. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](六)

    前言 大家好,我是Rector 又是星期五,很兴奋,很高兴,很high...啦啦啦... Rector在图享网又和大家见面啦!!!上一篇<一步一步创建ASP.NET MVC5程序[Reposit ...

  5. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)

    前言 Hi, 大家好,还是星期五,还是Rector,又在图享网准时和大家见面了. 今天给大家带来系列教程<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Auto ...

  6. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

    前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...

  7. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)

    前言 小伙伴们, 大家好,我是Rector. 最近Rector忙于换工作,没有太多时间来更新我们的ASP.NET MVC 5系列文章 [一步一步创建ASP.NET MVC5程序Repository+A ...

  8. 利用HTML5与jQuery技术创建一个简单的自动表单完成

    来源:GBin1.com 在线演示   在线下载 谷歌快速搜索自带大量自动完成插件——库中甚至还有一个附带的jQuery UI共享选项.然而今天我要寻找一个替代的解决方案.由DevBridge开发的j ...

  9. 使用面向对象技术创建高级 Web 应用程序

    作者: 出处: 使用面向对象技术创建高级 Web 应用程序 来源:开源中国社区 作者:oschina 最近,我面试了一位具有5年Web应用开发经验的软件开发人员.她有4年半的JavaScript编程经 ...

随机推荐

  1. 【云计算】pig基础、运行、编写

    会用和用得好是两个概念. 一.pig基础概念 二.pig运行方式 Pig 有两种运行模式: Local 模式和 MapReduce 模式. 本地模式:$pig-x local test.pig Map ...

  2. (转)linux shell 数字计算详解

    代码中免不了要进行各种数据计算.抛开科学计算不提,普通的计算占地,百分比,同比,环比等需求就很常见.linux shell中进行数字计算,主要有如下几种方式: 1.bc bc是比较常用的linux计算 ...

  3. web测试工具总结

     纯粹的手工测试早已不满足如今的项目需求,各种测试工具的应用早已成为普遍趋势.如何选取合适的工具来完成对应的测试工作?本文将针对Web测试,列举 一些推荐的测试工具,并加以简单介绍. (每个工具的实际 ...

  4. plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致

    今天遇到这个问题网上搜了一下答案找到了 转贴 http://blog.csdn.net/lidew521/article/details/8546155 plsql 登录后提示: Database c ...

  5. ORA-XXXX错误集合

    第一.ORA-12514:listener does not currently know of service requested in connect descriptor 监听器巴拉巴拉一堆,然 ...

  6. Java EE环境

    Java EE环境,包括EJB容器和Web容器. (1)Web容器:只运行Web应用的容器,例如Tomcat就是开源的Web容器,它可以运行JSP.Servlet等. (2)EJB容器:运行在EJB组 ...

  7. Eclipse/MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory”

    Eclipse或者MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory” 在NDK目录中新建一个名称 ndk-build (没有扩展名)的空文件

  8. Bootstrap使用模态框modal实现表单提交弹出框

    Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等.如果 ...

  9. Maven是什么

    一.Maven是什么 Maven是一个Apache公司的开源项目,是项目构建工具.用来管理依赖. 1.Maven的好处 使用maven可以在项目中不用导入项目依赖的jar包,省去了下载和导入jar包的 ...

  10. CentOS7配置中文

    CentOS7配置中文 yum install kde-l10n-Chinese -y vim /etc/locale.conf修改为zh_CN.UTF-8 vim /etc/environment添 ...