zoukankan      html  css  js  c++  java
  • ASP.netMVC验证码

    1、复制下列代码,拷贝到控制器中。
     
    #region  生成验证码图片
            // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]
            public ActionResult SecurityCode()
            {
    
                string oldcode = Session["SecurityCode"] as string;
                string code = CreateRandomCode(5);
                Session["SecurityCode"] = code;
                return File(CreateValidateGraphic(code), "image/Jpeg");
            }
    
    
            private byte[] CreateImage(string checkCode)
            {
                int iwidth = (int)(checkCode.Length * 12);
                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.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 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, 1), 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 = -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;
            }
            /// <summary>
            /// 创建验证码的图片
            /// </summary>
            public byte[] CreateValidateGraphic(string validateCode)
            {
                Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27);
                Graphics g = Graphics.FromImage(image);
                try
                {
                    //生成随机生成器
                    Random random = new Random();
                    //清空图片背景色
                    g.Clear(Color.White);
                    //画图片的干扰线
                    for (int i = 0; i < 25; 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", 13, (FontStyle.Bold | FontStyle.Italic));
                    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                     Color.Blue, Color.DarkRed, 1.2f, true);
                    g.DrawString(validateCode, font, brush, 3, 2);
                    //画图片的前景干扰点
                    for (int i = 0; i < 100; 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), 0, 0, image.Width - 1, image.Height - 1);
                    //保存图片数据
                    MemoryStream stream = new MemoryStream();
                    image.Save(stream, ImageFormat.Jpeg);
                    //输出图片流
                    return stream.ToArray();
                }
                finally
                {
                    g.Dispose();
                    image.Dispose();
                }
            }
            #endregion
    
    
    2、复制以下图片标记到视图中
        <img src="/控制器的名字/SecurityCode" onclick="this.src+='?new Date()'" />
    
    3、验证方式,使用 Session["SecurityCode"] 判断填写的是否相等。
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/yu-shang/p/10623188.html
Copyright © 2011-2022 走看看