图片验证码

     图片验证码,就是首先造一张空白的图,然后在图片上绘制随机数就可以了,在这里用到了一般处理程序。

  一般处理程序就是单纯的页面(无任何标签),是.ashx文件,里面的验证数字利用Session保存,用Response显示在页面上,如果想用的话 直接图片按钮(Image Button)路径到这个页面就可以,, 而里面的验证数字则可以利用Session["name"]来接收。                         ↓

                                    ↓

                                    ↓

              img.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);

1、下面用代码来介绍一下一般处理程序:

Show.ashx 页面
<%@ WebHandler Language="C#" Class="Show" %>

using System;
using System.Web;
using System.Drawing;//引用绘图命名空间
using System.Web.SessionState;//IRequiresSessionState的命名空间
//一般处理器
public class Show : IHttpHandler, IRequiresSessionState  Session的接口,必须得继承,不然没法用session
{
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "image/jpeg";  //输出类型 为图片类型
        
        //开始造图片,
        Bitmap img = new Bitmap(50,20);  //一张宽度为50,高度为20的空白图片
        Graphics gc = Graphics.FromImage(img);  //往img图里绘制
        Font font = new Font("楷体",12,FontStyle.Bold);//字体格式
        SolidBrush brush = new SolidBrush(Color.White);//刷子格式 ,里面的颜色是背景颜色    
        gc.FillRectangle(brush,0,0,50,20);//绘制的样子
        brush.Color = Color.Red;//刷子颜色
    
        
        //已经绘制完了,往图里扔验证码,开始造验证码
        string s = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        string str = "";
        Random r = new Random(); //随机出一个数来
       
        for (int i = 0; i < 4; i++)
        {
            int x = r.Next(0, 62);
            string  ss = s.Substring(x, 1); //截取字符串
            str +=  ss;
        }
        
        //验证码已经造好了,开始往图片里扔,前提先保存一下验证码的内容,为了以后的使用(输入验证)
        context.Session["yanzheng"] = str;
        
        //往图片里仍
        gc.DrawString(str,font,brush,0,0);

     
        //  最后将图片保存,通过response响应流保存
        img.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

一般处理程序造好以后,需要来用它,这里是用的图片按钮(ImageBotton)来接收,右键ImageButton ,找到ImageUrl属性,直接选择路径就可以了,在这里的路径是Show.ashx

既然图片已经显示在页面上了,就需要进行验证。。。  用Session来接收

  protected void Button1_Click(object sender, EventArgs e)  //注册验证
    {
        string txtyanzheng = TextBox4.Text;
        if (string.IsNullOrWhiteSpace(txtyanzheng))
        {

        }
        else
        {
            string yanzheng = Session["yanzheng"].ToString();  //用Session传值接收过来

            if (txtyanzheng == yanzheng)
            {
                Response.Write("<script>alert('注册成功')</script>");
            }
            else
            {
                Response.Write("<script>alert('验证码不正确')</script>");
            }
        }
    }

 这样就能实现图片验证码的验证了,下面附效果图:

   

 2、传值:两种方式 SessionResponse.Redirect

3、至于最后的点击图片换一下验证码,就是点击一下路径变一下,最后有个id(自己随便起)放不同的数就可以了

ImageButton1.ImageUrl = "show.ashx?id=" + new Random().Next(100).ToString();

     点击一下图片按钮,路径变一下,就相当于刷新验证码了

原文地址:https://www.cnblogs.com/lk-kk/p/4661153.html