jinyuttt

导航

验证码生成代码

protected void Page_Load(object sender, EventArgs e)
        {
            CreateCheckCodeImage(GenerateCheckCode());
        }
        private string GenerateCheckCode()
        {
            int num;
            char code;
            string checkcode = string.Empty;
            Random rand = new Random();
            for (int i = 0; i < 4; i++)
            {
                num = rand.Next();
                if(num%2==0)
                    code=(char)('0'+(char)(num%10));
                else
                    code=(char)('A'+(char)(num%26));

                checkcode+=code.ToString();
            }
            Response.Cookies.Add(new HttpCookie("checkcode",checkcode));
            return checkcode;
        }
        private void CreateCheckCodeImage(string checkCode)
        {
            if (checkCode == null || checkCode.Trim() == string.Empty)
                return;
            System.Drawing.Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                Random rand = new Random();
                g.Clear(Color.White);
                for (int i = 0; i < 2; 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.Black), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 12, (System.Drawing.FontStyle.Bold));
           System.Drawing.Drawing2D.LinearGradientBrush brush=new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),Color.Blue, Color.DarkRed, 1.2f, true);
           g.DrawString(checkCode, font, brush, 2, 2);
           for (int i = 0; i < 100; i++)
           {
               int x = rand.Next(image.Width);
               int y = rand.Next(image.Height);
               image.SetPixel(x, y, Color.FromArgb(rand.Next()));

           }
                g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);
                System.IO.MemoryStream ms=new System.IO.MemoryStream();
                image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType="image/Gif";
                Response.BinaryWrite(ms.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }

        }
    }

posted on 2011-03-02 11:28  代码苦行僧  阅读(270)  评论(0编辑  收藏  举报