当前位置: 首页 > 图灵资讯 > 技术篇> ASP.NET(C#)实现验证码功能

ASP.NET(C#)实现验证码功能

来源:图灵教育
时间:2023-06-30 16:33:40

创建一个专门用于创建验证码图片的页面ValidateCode.aspx的后台cs文件代码如下:

PageLoad    private       void    Page_Load(   object    sender, System.EventArgs e)              {            string checkCode = CreateRandomCode(4);            Session["CheckCode"] = checkCode;            CreateImage(checkCode);        }

CreaterandomCode是自定义函数,参数代表验证码位数

private       string    CreateRandomCode(   int    codeCount)              {            string allChar = 0、1、2、3、4、5、6、7、8、9A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z" ;            string[] allCharArray = allChar.Split(',');            string randomCode = "";            int temp = -1;            Random rand = new Random();            for(int i = 0; i < codeCount; i++)            {                if(temp != -1)                {                    rand = new Random(i*temp*((int)DateTime.Now.Ticks));                }                int t = rand.Next(35);                if(temp == t)                {                    return CreateRandomCode(codeCount);                }                temp = t;                randomCode += allCharArray[t];            }            return randomCode;        }

Createimage也是生成图片的自定义函数

private       void    CreateImage(   string    checkCode)              {            int iwidth = (int)(checkCode.Length * 11.5);            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);            Graphics g = Graphics.FromImage(image);            Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);            Brush b = new System.Drawing.SolidBrush(Color.White);            //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);            g.Clear(Color.Blue);            g.DrawString(checkCode, f, b, 3, 3);            Pen blackPen = new Pen(Color.Black, 0);            Random rand = new Random();            for (int i=0;i<5;i++)            {                int y = rand.Next(image.Height);                g.DrawLine(blackPen,0,y,image.Width,y);            }                        System.IO.MemoryStream ms = new System.IO.MemoryStream();            image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);            Response.ClearContent();            Response.ContentType = "image/Jpeg";            Response.BinaryWrite(ms.ToArray());            g.Dispose();            image.Dispose();        } //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);g.Clear(Color.Blue);

这两种方法都可以改变生成图片的背景颜色。下面的for循环用于生成一些需要使用验证码的页面的随机水平线<asp:Image>控制器可以,但Imageurl应该指向生成验证码的页面

 < asp:Image Runat = " server "  ID = " ImageCheck "  ImageUrl="ValidateCode.aspx" ></ asp:Image >