ASP.netMVC验证码
阅读原文时间:2023年07月10日阅读:1

、复制下列代码,拷贝到控制器中。

#region 生成验证码图片
// [OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]
public ActionResult SecurityCode()
{

        string oldcode = Session\["SecurityCode"\] as string;  
        string code = CreateRandomCode();  
        Session\["SecurityCode"\] = code;  
        return File(CreateValidateGraphic(code), "image/Jpeg");  
    }

    private byte\[\] CreateImage(string checkCode)  
    {  
        int iwidth = (int)(checkCode.Length \* );  
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, );  
        Graphics g = Graphics.FromImage(image);  
        Font f = new System.Drawing.Font("Arial", , System.Drawing.FontStyle.Bold);  
        Brush b = new System.Drawing.SolidBrush(Color.White);  
        g.Clear(Color.Blue);  
        g.DrawString(checkCode, f, b, , );  
        Pen blackPen = new Pen(Color.Black, );  
        Random 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);  
        }  
        System.IO.MemoryStream ms = new System.IO.MemoryStream();  
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);  
        return ms.ToArray();  
    }

    private string CreateRandomCode(int codeCount)  
    {  
        string allChar = "0,1,2,3,4,5,6,7,8,9,A,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 = -;  
        Random rand = new Random();  
        for (int i = ; i < codeCount; i++)  
        {  
            if (temp != -)  
            {  
                rand = new Random(i \* temp \* ((int)DateTime.Now.Ticks));  
            }  
            int t = rand.Next();  
            if (temp == t)  
            {  
                return CreateRandomCode(codeCount);  
            }  
            temp = t;  
            randomCode += allCharArray\[t\];  
        }  
        return randomCode;  
    }  
    /// <summary>  
    /// 创建验证码的图片  
    /// </summary>  
    public byte\[\] CreateValidateGraphic(string validateCode)  
    {  
        Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length \* 16.0), );  
        Graphics g = Graphics.FromImage(image);  
        try  
        {  
            //生成随机生成器  
            Random random = new Random();  
            //清空图片背景色  
            g.Clear(Color.White);  
            //画图片的干扰线  
            for (int i = ; i < ; i++)  
            {  
                int x1 = random.Next(image.Width);  
                int x2 = random.Next(image.Width);  
                int y1 = random.Next(image.Height);  
                int y2 = random.Next(image.Height);  
                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);  
            }  
            Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));  
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),  
             Color.Blue, Color.DarkRed, 1.2f, true);  
            g.DrawString(validateCode, font, brush, , );  
            //画图片的前景干扰点  
            for (int i = ; i < ; i++)  
            {  
                int x = random.Next(image.Width);  
                int y = random.Next(image.Height);  
                image.SetPixel(x, y, Color.FromArgb(random.Next()));  
            }  
            //画图片的边框线  
            g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );  
            //保存图片数据  
            MemoryStream stream = new MemoryStream();  
            image.Save(stream, ImageFormat.Jpeg);  
            //输出图片流  
            return stream.ToArray();  
        }  
        finally  
        {  
            g.Dispose();  
            image.Dispose();  
        }  
    }  
    #endregion

、复制以下图片标记到视图中

、验证方式,使用 Session["SecurityCode"] 判断填写的是否相等。