这要怎么回答才可以?希望详细一点谢谢!!!!!!!!

解决方案 »

  1.   

    新建一个Createimage.aspx页面,然后在CS代码如下:
    使用方法:例如登陆界面上需要验证码,就放一个image或者imagebutton,imageurl就选Createimage.aspx protected void Page_Load(object sender, EventArgs e)
        {
              CreateImageM(CreateValidate(5));    //5是验证码的位数. 可以根据需要改  
        }
        /// <summary>
        /// 生成随机验证码
        /// </summary>
        /// <param name="count"></param>
        /// <returns></returns>
        private string CreateValidate(int count)
        { 
           //定义验证码中要用到的字符
            string allchar = "1,2,3,4,5,6,7,8,9,0,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(',');
            //初始化一个随机数
            string randomcode = "";
            int temp = -1;
            //生成一个对象
            Random rand = new Random();
            //根据验证码的位数循环
            for (int i = 0; i<count; i++ )
            {
                //防止生成相同的验证码
                if(temp!=-1)
                {
                   //加入时间的刻度
                    rand = new Random(i*temp*((int)DateTime.Now.Ticks));
                }
                int t = rand.Next(35);
                if(temp==t)
                {
                   //相等就重新生成
                    return CreateValidate(count);
                }
                temp = t;
                randomcode += allchararray[t];
            }
            //在Session中保存随机数验证码
            Session["Valid"] = randomcode.ToLower();
            //返回生成的随机数
            return randomcode;
        }
        /// <summary>
        /// 生成验证码背景图片
        /// </summary>
        /// <param name="validateCode"></param>
        private void CreateImageM(string validateCode)
        { 
            //图像的高度,与验证码的长度成一定比例
            int iwidth = (int)(validateCode.Length * 11.5);
            //创建一个长20,宽iwidth的图像对象
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
            //创建一个新绘图对象
            Graphics g = Graphics.FromImage(image);
            //绘图用的字体和字号
            Font f = new System.Drawing.Font("Arial", 11, System.Drawing.FontStyle.Bold);
            //刷子的大小
            Brush b = new System.Drawing.SolidBrush(Color.White);
            //清除背景色,用一颜色填充
            g.Clear(Color.DarkOliveGreen);        //格式化刷子
            g.DrawString(validateCode,f,b,3,3);
            //创建铅笔
            Pen blackPen = new Pen(Color.Black,0);
            //创建随机对象
            Random rand = new Random();
            //随机画线
            for (int i = 0; i<2; i++ )
            {
                int y = rand.Next(image.Height);
                //有指定的铅笔画线
                g.DrawLine(blackPen,0,y,image.Width,y);        }        //输出绘图
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            //将图像保存到指定的流
            image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
            Response.ClearContent();
            //配置输出类型
            Response.ContentType = "image/Jpeg";
            //输入内容
            Response.BinaryWrite(ms.ToArray());
            //清空不需要的资源
            g.Dispose();
            image.Dispose();    
        }
      

  2.   

    新建一个aspx文件,在Aspx中,去掉除第一行<%%>之外的所有内容。
    在对应的aspx.cs中,加入如下代码:
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Buffer = true;
            Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
            Response.Expires = 0;
            Response.CacheControl = "no-cache";
            Response.AddHeader("Pragma", "No-Cache");        System.Random rdm = new Random();
            Bitmap bp = new Bitmap(100, 40);
            string AllStr = "23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz";
            string[] zt = new string[] { "Arial Black", "Comic Sans MS", "Georgia" };
            SolidBrush bs = new SolidBrush(Color.FromArgb(255, 55, 0));
            SolidBrush bs1 = new SolidBrush(Color.FromArgb(243, 241, 241));
            SolidBrush bs2 = new SolidBrush(Color.FromArgb(80, 230, 115, 0));
            Graphics Dr = Graphics.FromImage(bp);
            Dr.FillRectangle(bs1, 0, 0, 100, 40);
            string rr = "";
            for (int i = 0; i <= 30; i++)
            {
                char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)];
                Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs2, rdm.Next(0, 100) - 20, rdm.Next(0, 40) - 15);
            }
            Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40));
            Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40));
            for (int i = 0; i < 4; i++)
            {
                char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)];
                rr += c1;
                Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs, i * 25, rdm.Next(0, 7));
            }
            Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), rdm.Next(0, 100), 0, rdm.Next(0, 100), 40);
            for (int i = 0; i <= 160; i++)
                bp.SetPixel(rdm.Next(0, 100), rdm.Next(0, 40), Color.FromArgb(rdm.Next(0, 255), rdm.Next(0, 255), rdm.Next(0, 255)));        Session["ValidateCode"] = rr;
            bp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            Response.Flush();
            Response.End();
        }
      

  3.   

    首先我们使用.NET框架中随机数生成器 Random类型来生成一个不定长的包含随机数字和英文字符的文本,这就是验证码原始文本,我们将其保存在session中供以后使用。然后我们创建一个临时图片,并据此创建一个临时的图象绘制对象,然后调用Graphics的MeasureString函数获得这个字符串的显示大小。据此我们就可以计算出验证码图片的大小。然后我们创建一个位图对象,在此基础上创建一个图形绘制对象,然后调用图形绘制对象的DrawString函数将验证码文本绘制在这个位图上。绘制验证码后我们在图片上随机的制造杂点来混淆图片内容。这些杂点的面积占图片面积的30%,而且其位置和颜色都是随机的。这些杂点能严重的干扰程序辨认验证码文本。但人脑在辨认文本时能比较轻松的排除这些干扰。图片生成后页面就使用PNG格式将图片文档发送到客户端。