验证码的生成与验证

来源:互联网 发布:淘宝店铺托管安全吗 编辑:程序博客网 时间:2024/06/03 19:24

直接创建一个方法,需要的时候调用就行。

        private void CreateImage(string strVerifyCode)        {            try            {                int iRandAngle = 45;    //随机转动角度                int iMapWidth = (int)(strVerifyCode.Length * 21);                Bitmap map = new Bitmap(iMapWidth, 28);     //创建图片背景                Graphics graph = Graphics.FromImage(map);                graph.Clear(Color.AliceBlue);//清除画面,填充背景                graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框                graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式                Random rand = new Random();                //背景噪点生成                Pen blackPen = new Pen(Color.LightGray, 0);                for (int i = 0; i < 50; i++)                {                    int x = rand.Next(0, map.Width);                    int y = rand.Next(0, map.Height);                    graph.DrawRectangle(blackPen, x, y, 1, 1);                }                //验证码旋转,防止机器识别                char[] chars = strVerifyCode.ToCharArray();//拆散字符串成单字符数组                //文字距中                StringFormat format = new StringFormat(StringFormatFlags.NoClip);                format.Alignment = StringAlignment.Center;                format.LineAlignment = StringAlignment.Center;                //定义颜色                Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };                //定义字体                string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };                for (int i = 0; i < chars.Length; i++)                {                    int cindex = rand.Next(7);                    int findex = rand.Next(5);                    Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)                    Brush b = new System.Drawing.SolidBrush(c[cindex]);                    Point dot = new Point(16, 16);                    float angle = rand.Next(-iRandAngle, iRandAngle);//转动的度数                    graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置                    graph.RotateTransform(angle);                    graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);                    graph.RotateTransform(-angle);//转回去                    graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置                }                // pbVerifyCode.Image = map;                pictureBox1.Image = map;            }            catch (ArgumentException)            {                MessageBox.Show("创建图片错误。");            }        }


                                             
0 0