C#使用GDI+实现生成验证码

作者:springsnow 时间:2023-04-10 10:42:44 

一、概述

一般处理程序 ashx :它没有服务器控件,用response输出什么就是什么。

生成验证码原理:产生随机字符,并将字符生成为图片,同时储存到Session里去,然后验证用户输入的内容是否与Session中的验证码相符即可。

效果图:用户可以点击切换验证码信息。

C#使用GDI+实现生成验证码

二、一般处理程序

public class CheckCodeHandler : IHttpHandler, IRequiresSessionState//使用到Session,需要实现此接口IRequiresSessionState
   {
       private int intLength = 5;        //长度
       private string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中

/// <summary>
       /// 生成验证图片核心代码
       /// </summary>
       /// <param name="context"></param>
       public void ProcessRequest(HttpContext context)
       {
           //背景用白色填充
           Bitmap map = new Bitmap(200, 60);
           Graphics g = Graphics.FromImage(map);
           g.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);

//将随机生成的字符串绘制到图片上
           string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
           Random r = new Random();
           StringBuilder s = new StringBuilder();
           Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);

for (int i = 0; i < intLength; i++)
           {
               s.Append(letters.Substring(r.Next(0, letters.Length - 1), 1));
               g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
           }
           font.Dispose();
           context.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否一致

//生成干扰线条,混淆背景
           Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
           for (int i = 0; i < 10; i++)
           {
               g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
           }
           pen.Dispose();

//设置输出流图片格式
           context.Response.ContentType = "image/gif";
           map.Save(context.Response.OutputStream, ImageFormat.Gif);
           map.Dispose();

context.Response.End();
       }
       public bool IsReusable
       {
           get
           {
               return false;
           }
       }
   }

三、在页面调用

<img src="CheckCodeHandler.ashx" alt="验证码" style="width: 60px; height: 24px" />
if (this.TextBox1.Text.ToUpper().Trim() != Session["strIdentify"].ToString().ToUpper().Trim())
{
   Response.Write("<script>alert('验证码不正确')</script>");
}
else
{
   Response.Write("<script>alert('登录成功')</script>");
}

来源:https://www.cnblogs.com/springsnow/p/9433975.html

标签:C#,GDI+,验证码
0
投稿

猜你喜欢

  • C# WinForm实现自动更新程序的方法详解

    2021-12-12 16:19:54
  • 快速学习六大排序算法

    2023-11-02 22:36:19
  • 解决Android 沉浸式状态栏和华为虚拟按键冲突问题

    2023-10-15 14:08:14
  • Spring的refresh()方法相关异常解析

    2021-12-08 07:39:07
  • Android实现点汇聚成字的动态效果详解

    2023-10-08 08:50:26
  • mac系统下载、安装、使用AndroidStudio

    2021-06-04 03:28:40
  • 详解Spring关于@Resource注入为null解决办法

    2023-02-13 18:14:13
  • Java使用JDBC连接Oracle_MSSQL实例代码

    2023-04-19 19:34:46
  • C#抽象类与抽象方法详解

    2022-05-20 18:08:03
  • Android实现通讯录效果——获取手机号码和姓名

    2021-10-25 11:53:59
  • Java实现世界上最快的排序算法Timsort的示例代码

    2021-12-14 17:57:27
  • java swing标准对话框具体实现

    2021-12-30 02:48:50
  • java递归菜单树转换成pojo对象

    2022-08-12 04:04:40
  • Android实现EventBus登录界面与传值(粘性事件)

    2023-11-08 00:34:52
  • Java 面试题基础知识集锦

    2022-05-25 00:01:58
  • 深入解析C#编程中struct所定义的结构

    2022-03-01 12:43:08
  • Java桥梁设计模式优雅地将抽象与实现分离

    2023-12-11 14:56:36
  • Java 十大排序算法之插入排序刨析

    2021-12-07 02:48:54
  • Android重力传感器实现滚动的弹球

    2023-05-04 05:49:28
  • servlet上传文件实现代码详解(四)

    2021-09-04 21:17:23
  • asp之家 软件编程 m.aspxhome.com