winform登录时载入验证码,并且点击可刷新

来源:互联网 发布:传奇盗取管理权限软件 编辑:程序博客网 时间:2024/06/08 10:17
找不到代码的原作者,若原作者看到可联系我删除
#region 生成验证码        #region 生成一定长度随机码        private const int codelength = 4;//随机码长度        private string randomCode = "";  //随机码        public string CreateCode(int length)  //生成一定长度随机码        {            int rand; char code;            string randomCode = string.Empty;            System.Random random = new Random();            for (int i = 0; i < length; i++)            {                rand = random.Next();                if (rand % 3 == 0)                {                    code = (char)('A' + (char)(rand % 26));                }                else code = (char)('0' + (char)(rand % 10));                randomCode += code.ToString();            }            return randomCode;        }        #endregion        #region 生成随机图片        public void CreateImagine(string randomCode)  //生成随机图片        {            try            {                int randAngle = 45;                int mapwidth = (int)(randomCode.Length * 21);                Bitmap map = new Bitmap(mapwidth, 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 = randomCode.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(-randAngle, randAngle);//转动的度数                    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);//移动光标到指定位置                   }                pb_AuthCode.Image = map;            }            catch (Exception ex)            {                MessageBox.Show(ex.Message, "提示");            }        }        #endregion        #region 更新验证码图片        private void updateCode()        {            randomCode = CreateCode(codelength);            CreateImagine(randomCode);        }        public void pb_AuthCode_Click_1(object sender, EventArgs e)        {            updateCode();        }        #endregion        #endregion

0 0
原创粉丝点击