在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一个LinearGradientBrush类等生成验证码图片。

本文生成图片验证码的采用Asp.Net中的一般处理程序文件ashx的文件,此文件一般继承于IHttpHandler的接口,是Asp.Net中一种比较常用的处理文件,比起.ASPX等页文件来,用ashx的文件生成图片验证码更为高效。

Asp.Net生成图片验证码工具类具体实现如下:

public class Handler:IHttpHandler,System.Web.SessionState.IRequiresSessionState
{
/// <summary>
///产生用于验证码的随机数
/// </ summary>
/// <param name =“number”> < / param>
/// <returns> </ returns>
public string Get_Code(int number)
{
#
region string s =“0AaB1oCb3pqD2cErf4dFs5GetHI6gu7JKLvhMwNixO8PyQj9zRSkTUVlWmXYnZ”;
随机rand = new Random();
StringBuilder builder = new StringBuilder();
for(int i = ; i <number; i ++)
{
char code = s [rand.Next(s.Length)];
builder.Append(code.ToString());
}
return builder.ToString();
#endregion
} public void ProcessRequest(HttpContext context)
{ BLL_User userbll = new BLL_User();
string code = Get_Code(); //生成验证码的四位随机码
context.Session [“Code”] = code;
位图图像=新位图(,);
图形g = Graphics.FromImage(图像);
试试
{
g.Clear(Color.White);
随机rand = new Random();
for(int i = ; i <; i ++)
{
int x1 = rand.Next(Image.Width);
int x2 = rand.Next(Image.Width);
int y1 = rand.Next(Image.Height);
int y2 = rand.Next(Image.Height);
g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);
}
Font font = new Font(“Arial”,,FontStyle.Italic);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(,,Image.Width,Image.Height),Color.Blue,Color.DarkRed,,true);
g.DrawString(代码,字体,画笔,,);
g.DrawRectangle(new Pen(Color.Silver),,,Image.Width - ,Image.Height - );
System.IO.MemoryStream stream = new System.IO.MemoryStream();
Image.Save(stream,ImageFormat.Gif);
context.Response.Clear();
context.Response.ContentType =“image / Gif”;
context.Response.BinaryWrite(stream.ToArray());
}
finally
{
g.Dispose();
Image.Dispose();
} } public BOOL IsReusable {
get {
return false;
}
} }

在上述代码中,.ashx的文件类继承了System.Web.SessionState.IRequiresSessionState接口,主要是为了能够在.ashx的文件中能访问到会话变量,并将生成好的验证码信息存入会话中。

在网络前端界面要生成二维码图片的时候,直接将IMG标签的图片路径的src属性指向这个ashx的文件,例如这个.ashx的文件在网络项目中存放在根目录并且命名为ValidateCode.ashx,则在HTML文件中直接如下形式即可生成验证码图片:

<img src =“ValidateCode.ashx”此处编写其他属性/>

备注:原文转载自博主个人站IT技术小趣屋,原文链接为Asp.Net生成图片验证码工具类_IT技术小趣屋

博主个人技术交流群:960640092,博主微信公众号如下:

【转载】Asp.Net生成图片验证码工具类的更多相关文章

  1. Java 验证码工具类

    package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...

  2. JAVA短信验证码 工具类

    MsgCodeUtil.java package com.hg.util; import com.soyea.enums.ResultEnum; import com.soyea.exception. ...

  3. ASP.NET的票据工具类FormsAuthenticationTicket

    票据是asp.net登录验证的一种方式,以前研究过,现在并不使用,今天发现了,记录一下. /*###################票据工具################### * 1.设置< ...

  4. C# 登陆验证码工具类VerifyCode

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...

  5. Vcode的生成工具类,生成制定长度验证码,图文验证码工具类

    public class VCodeUtils { // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 public static f ...

  6. 转:Java生成图片验证码(有点仿QQ验证码的意思)

    http://blog.csdn.net/ruixue0117/article/details/22829557 java: VerifyCodeUtils.java package com.fro. ...

  7. Java 图片验证码工具

    package com.microwisdom.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics ...

  8. Java使用imageio、awt生成图片验证码

    1.生成验证码工具类 public class CheckCodeTool { private Integer width = 80; private Integer height = 38; pub ...

  9. Hutool中那些常用的工具类和方法

    Hutool中那些常用的工具类和方法 Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hu ...

随机推荐

  1. pycharm运行过程中pycharm控制台和python控制台之间的切换

    有时候在调试(debug)python代码的时候,希望像matlab那样输入某一个变量以查看其值,这是需要把pycharm的console切换到python的console,以输入变量查看其值,点击那 ...

  2. hadoop java.nio.channels.ClosedChannelException

    今天在跑一个任务的时候,报错java.nio.channels.ClosedChannelException. INFO mapreduce.Job: Task Id : attempt_152101 ...

  3. centos7+docker 安装和部署crawlab分布式爬虫平台,并使用docker-compose管理docker

    1.先决条件centos7+docker最新版本 sudo yum updat 2.配置一下镜像源,创建/etc/docker/daemon.conf文件,在其中输入如下内容 { "regi ...

  4. [东西]EquationCalcular

    名称:EquationCalcular 版本:V1.0.0 更新日期:2015/9/27   简要介绍:本工具用于计算范围比较有限的方程及方程组,仅仅局限于n元一次方程组,欢迎需要的小学生和初中生来玩 ...

  5. 剑指offer 6:链表(从头到尾打印链表)

    链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...

  6. MYSQL:基于哈希的索引和基于树的索引有什么区别?

    B+树是一个平衡的多叉树.B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动. 哈希索引采用一定的哈希算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点逐级查找,只需一次哈希算法 ...

  7. java插入代码块

    粘贴1: 当代码写到一定程度之后,就会发现很多代码都被重复地敲了N多遍,甚至毫不夸张地说:闭着眼睛都能敲出来.大量地敲这些重复地代码,除了锻炼敲键盘的速度,基本上没有其他益处,但是长期下来会浪费很多时 ...

  8. nodejs进程管理

    NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用. 我们已经知道了Node ...

  9. 使用dozer将DTO转化为DO

    DTO,就是Data Transfer Object,数据传输对象,可以简单理解成请求中的对象. PO,就是Persistant Object,持久化对象,它跟持久层(通常是关系型数据库)的数据结构形 ...

  10. vertica审计日志

    最近时段的所有请求: select * from dc_requests_issued order by time desc limit 10; 默认在磁盘上保留50MB: dbadmin=> ...