C#产生随机验证码

一、先看一下实现的效果:

二、具体实现

       #region 声明变量

        public string yanzhengma = "";

        bool bolStar = true;

        Panel pyanzhengma = new Panel();

         #endregion

 

private void FRM_denglu_Load(object sender, EventArgs e)

        {

           AnimateWindow(Handle, 1000, 0x20010);   // 居中逐渐显示。

 

            #region 获取系统所有用户名

            DataTable dt = myLoginClient.frmLogin_SelectUsers().Tables[0];

            cbo_YongHuMing.DataSource = dt;

            cbo_YongHuMing.DisplayMember = "Uers";

            cbo_YongHuMing.ValueMember = "UserID";//加载用户名信息

            #endregion

 

            #region 显示验证码

            CreateYanZheengMa();

            #endregion

        }

        #region pyanzhengma验证码显示控件的绘制事件

        public void p_Paint(object sender, PaintEventArgs e)

        {

            CreateImage(yanzhengma, e);

        }

        #endregion

 

        #region 绘制验证码背景噪音线与前景噪音点

        private void CreateImage(string checkCode, PaintEventArgs e)

        {

            if (checkCode == null || checkCode.Trim() == String.Empty)

                return;

            Bitmap image = new Bitmap(checkCode.Length * 15 + 10, 24);

            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", 12, (FontStyle.Bold | FontStyle.Italic));

                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.BlueViolet, Color.Crimson, 1.2f, true);

                g.DrawString(checkCode, font, brush, 2, 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.Blue), 0, 0, image.Width - 1, image.Height - 1);

                using (System.IO.MemoryStream ms = new System.IO.MemoryStream())

                {

                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

                    e.Graphics.DrawImage(image, new Point(1, 0));

                }

            }

            catch { }

 

            finally

            {

                bolStar = false;

                g.Dispose();

                image.Dispose();

            }

        }

        #endregion

 

        #region 产生随机验证码

        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,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";

            string[] allCharArray = allChar.Split(',');

            int temp = -1;

            string randomCode = "";

            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(61);

                if (temp == t)

                {

                    return CreateRandomCode(codeCount);

                }

                temp = t;

                randomCode += allCharArray[t];

            }

            return randomCode;

        }

        #endregion

 

        #region 验证码生成方法

        public void CreateYanZheengMa()

        {

            //清空界面控件panel1的内容

            this.panel1.Controls.Clear();

            //使用动态声明Panel类型的控件pyanzhengma,并设置该控件显示的相对位置

            pyanzhengma.Location = new Point(0, 0);

            //设置pyanzhengma的控件大小,宽度为84,高度为26

            pyanzhengma.Size = new Size(84, 26);

            //使用重载运算符“+=”为pyanzhengma注册绘制事件,让pyanzhengma中出现文字、前景噪音点 、背景噪音线

            pyanzhengma.Paint += new PaintEventHandler(p_Paint);

            //为pyanzhengma注册单击事件,使单击验证码图像的时候验证码更新

            pyanzhengma.Click += new EventHandler(pyanzhengma_Click);

            //将设置好的pyanzhengma控件添加到panel1的控件集合中,即可将验证码显示

            this.panel1.Controls.Add(pyanzhengma);

            //生成随机4个文字的验证码,并赋值给自定义的公共字段yanzhengma

            yanzhengma = CreateRandomCode(4);

        }

        #endregion

 

       #region 刷新验证码

        private void pyanzhengma_Click(object sender, EventArgs e)

        {

            if (bolStar == false)

            {

                bolStar = true;

                CreateYanZheengMa();

            }

        }

        #endregion

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值