基于Asp.net mvc自动生成验证码

来源:互联网 发布:flac数值模拟软件 编辑:程序博客网 时间:2024/06/04 19:34

,最近在学习mvc设计模式,学到了验证码所以来分享一下。(T….课堂上学的)

运用简单的GDI+技术绘制验证码图片。

下面是代码。

①aspx页面

<img src="/action/ValidataCode" onclick="this.src=this.src+'?'" alt="验证码" style="cursor:pointer" />

点击刷新代码(onclick=”this.src=this.src+’?’”)

②后台页面

//图片引用这个控制器id(ValidataCode)public ActionResult ValidataCode()        {            byte[] data = null;            //随机获取5位验证码            string Code = MyRandom(5);            TempData["code"] = Code;            //创建画板,画板大小70*30,这个可以修改            Bitmap MyBt = new Bitmap(70,30);            //创建画笔            Graphics gp = Graphics.FromImage(MyBt);            //填充画板为白色,2和-2会让验证码的图片出现边框            gp.FillRectangle(Brushes.White,2,2,MyBt.Width-4,MyBt.Height-4);            //绘制验证码            gp.DrawString(Code, new Font("宋体", 14), Brushes.Black, new PointF(5, 5));            //绘制噪线            Random rand=new Random();            for(int i=0;i<5;i++)            {                gp.DrawLine(new Pen(RandColor()), rand.Next(MyBt.Width), rand.Next(MyBt.Height), rand.Next(MyBt.Width), rand.Next(MyBt.Height));            }            //绘制噪点            for (int i = 0; i < 5; i++)            {                MyBt.SetPixel(rand.Next(MyBt.Width), rand.Next(MyBt.Height), RandColor());            }            //释放资源            gp.Dispose();            //保存图片            MemoryStream ms = new MemoryStream();            MyBt.Save(ms,ImageFormat.Jpeg);            data = ms.GetBuffer();            return File(data,"image/jpeg");        }        //产生len个验证码        public string MyRandom(int len)        {        //这里是验证码出现的字符,可以更改,可以为中文。中文得修改画板的大小            String words = "1234567890qwertyuopasdfghjklxcvbnm";            StringBuilder sb = new StringBuilder();            Random rand = new Random();            for (int i = 0; i < len; i++)            {                int index = rand.Next(0, words.Length);                char ch = words[index];                sb.Append(words[index] + "");            }            return sb.ToString();        }        //随机产生颜色,为噪点和噪线。        public Color RandColor()        {            Random rand = new Random();            int red = rand.Next(10, 200);            int green = rand.Next(10, 200);            int blue = rand.Next(10, 200);            return Color.FromArgb(red,green,blue);        }

本人小白,如有错误请指点。