别人写的图片验证码程序

 

public void creatImage()
  {
   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,V,W,X,Y,Z";
   string[] myStr=allChar.Split(',');   
   int num=0,num1=0,num2=0,num3=0;
   string myChar="";
   Random ran=new Random();
   num=ran.Next(myStr.Length);
   num1=ran.Next(myStr.Length);
   num2=ran.Next(myStr.Length);
   num3=ran.Next(myStr.Length);
   myChar=myStr[num1]+myStr[num]+myStr[num2]+myStr[num3];
   //建立位图对象
   Bitmap newBitmap = new Bitmap(36,16,PixelFormat.Format32bppArgb);
   //根据上面创建的位图对象创建绘图面
   Graphics g = Graphics.FromImage(newBitmap);
   //以指定的颜色填充矩形区
   g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0,0,50,16));
   //创建字体对象
   Font textFont = new Font("Times New Roman",10);
   //创建RectangleF结构指定一个区域
   RectangleF rectangle = new RectangleF(0,0,50,16);
   //使用指定的颜色填充上面RectangleF结构指定的矩形区域
   g.FillRectangle(new SolidBrush(Color.BurlyWood), rectangle);
   //在上面填充的矩形区域中填充上面生成的随机数
   g.DrawString(myChar, textFont, new SolidBrush(Color.Blue), rectangle);
   //把创建的位图保存到指定的路径
   newBitmap.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
   Session["num"]=myChar;

  }

     但因为我是个新手,对.NET的安全等方面的没有考虑过,不知这样实现图片验证不知会有什么缺点,因为我看过其它人写的图片验证码的程序太烦了.请各位多多指教.
     顺便请教个问题,就是上面的随机生成数字的
   Random ran=new Random();
   num=ran.Next(myStr.Length);
   num1=ran.Next(myStr.Length);
   num2=ran.Next(myStr.Length);
   num3=ran.Next(myStr.Length);
   myChar=myStr[num1]+myStr[num]+myStr[num2]+myStr[num3];
这段程序我换为
   string myChar="";
       string[] Str=new string[4];
    for(int i=0;i<4;i++)
    {
     int num=0;
     Random ran=new Random();
     num=ran.Next(myStr.Length);
     Str[i]=myStr[num];
     myChar+=Str[i];
为什么生成的是全部一样的字符串呢,但要是我VS上断点调试的却又可以生成随机的字符串呢,这个我一直想不明白,请高手指教!

???刚下班,晚上回去操练操练!

原文地址:https://www.cnblogs.com/wppt/p/474569.html