• c#生成图片验证码


    一般处理程序 ashx :它没有服务器控件,用response输出什么就是什么,一般作为文件来使用,放在aspx页面里使用

    session:是用来存储数据的,设计一个服务器端的全局变量,在一般处理程序中,使用session需要引用命名空间,并继承接口

    imagebutton用来显示验证码图片,通过?id=...来改变图片

    一般处理程序ashx里的代码

    <%@ WebHandler Language="C#" Class="Handler" %>
    
    using System;
    using System.Web;
    using System.Drawing;
    using System.Web.SessionState;
    //引用的命名空间  
    public class Handler : IHttpHandler, IRequiresSessionState
    {
        public string charSet = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y";
        public void ProcessRequest (HttpContext context)
        {
           
                string validateCode = CreateRandomCode(4);
                context.Session["ValidateCode"] = validateCode;
               CreateImage(validateCode, context);  
            
            //context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");
            //string validateCode = CreateRandomCode(4);
            //context.Session["ValidateCode"] = validateCode;
            //CreateImage(validateCode, context);   
    
        }
     
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
        private string CreateRandomCode(int n)
        {
            string[] CharArray = charSet.Split(',');
            string randomCode = "";
            int temp = -1;
            Random rand = new Random();
            for (int i = 0; i < n; i++)
            {
                if (temp != -1)
                {
                    rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
                } int t = rand.Next(CharArray.Length - 1);
                if (temp == t)
                {
                    return CreateRandomCode(n);
                } temp = t;
                randomCode += CharArray[t];
            }
            return randomCode;
        }
    
    
        //绘制验证码图片
        private void CreateImage(string checkCode, HttpContext context)
        {
            int iwidth = (int)(checkCode.Length * 13);
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
            Graphics g = Graphics.FromImage(image);
            Font f = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Italic | System.Drawing.FontStyle.Bold));        // 前景色  
    
            Brush b = new System.Drawing.SolidBrush(Color.Black);        // 背景色       
            g.Clear(Color.White);        // 填充文字        
            g.DrawString(checkCode, f, b, 0, 1);        // 随机线条        
            Pen linePen = new Pen(Color.Gray, 0);
            Random rand = new Random();
            for (int i = 0; i < 5; i++)
            {
                int x1 = rand.Next(image.Width);
                int y1 = rand.Next(image.Height);
                int x2 = rand.Next(image.Width);
                int y2 = rand.Next(image.Height);
                g.DrawLine(linePen, x1, y1, x2, y2);
            }
            // 随机点        
            for (int i = 0; i < 30; i++)
            {
                int x = rand.Next(image.Width);
                int y = rand.Next(image.Height);
                image.SetPixel(x, y, Color.Gray);
            }
            // 边框       
            g.DrawRectangle(new Pen(Color.Gray), 0, 0, image.Width - 1, image.Height - 1);
            // 输出图片  
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            context.Response.ClearContent();
            context.Response.ContentType = "image/Jpeg";
            context.Response.BinaryWrite(ms.ToArray());
    
            g.Dispose();
            image.Dispose();
        }    
    
    
    }


    aspx里的代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;
    using System.IO;
    
    
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
     
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text.ToUpper().Trim() == Session["ValidateCode"].ToString().ToUpper().Trim())
            {
               Response.Write("<script>alert('验证码相同')</script>");
            }
    else
    {
       Response.Write("<script>alert('验证码不正确')</script>");
    }
    
    
    }
        //看不清,换一张
    protected void Button2_Click(object sender, EventArgs e)
    {
        //通过超链接传值来改变验证码图片
        ImageButton1.ImageUrl = "Handler.ashx?id="+new Random().Next(62);
    }
    }


    aspx界面里的代码

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html>
    <script runat="server">
    
       
       
    </script>
    
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <br />
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登录" />
        
            <br />
            <br />
    &nbsp;<br />
    &nbsp;&nbsp;
            <asp:Label ID="Label1" runat="server" Text="验证码"></asp:Label>
    &nbsp;&nbsp;
            <asp:TextBox ID="TextBox1" runat="server" Height="32px"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="看不清 换一张" />
    
    
    
                    重点看这一句
                   <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="Handler.ashx" />
    
    
    
                </ContentTemplate>
            </asp:UpdatePanel>
    &nbsp;&nbsp;&nbsp;&nbsp
            &nbsp;
     
     
    
           
            <br />
            <br />
            <br />
            <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                
        </div>
        </form>
    </body>
    </html>
  • 相关阅读:
    链表相交
    环路检测
    lambada表达式对集合的过滤和相互转换
    lambda表达式对集合的遍历
    centos7常用命令
    小程序文件
    扫码登录
    位操作
    使用json-lib转换对象为字符串时的特殊处理
    javac 编译异常总结
  • 原文地址:https://www.cnblogs.com/275147378abc/p/4658775.html
Copyright © 2020-2023  润新知