好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

c#生成随机彩色验证码例子

c#生成随机彩色验证码例子

c#生成随机彩色验证码例子

一个简单的例子实现根据验证码判断登陆。

登陆页:

 <table>
            <tr>
                <td style= "  text-align: right; height: 40px;  100px;  " >
                    <asp:TextBox ID= "  txtCheckCode  "  runat= "  server  "  Height= "  25px  "  Width= "  97px  "  ValidationGroup= "  1  " ></asp:TextBox>
                </td>
                <td style= "  text-align: center; height: 40px;  100px;  " >
                    <img id= "  chkCode  "  src= "  CheckCode.aspx  "  onclick= "  javascript:CheckCode();  "  style= "  cursor: pointer  "  />
                </td>
                <td>
                    & nbsp;
                     <asp:RequiredFieldValidator ID= "  RequiredFieldValidator2  "  runat= "  server  "  ControlToValidate= "  txtCheckCode  "  
                        ErrorMessage = "  请输入验证码!  "  ForeColor= "  Red  "  ValidationGroup= "  1  " ></asp:RequiredFieldValidator>
                </td>
                <td>
                <asp:Button  ID= "  btn  "  Text= "  登陆  "  runat= "  server  "  onclick= "  btn_Click  "  ValidationGroup= "  1  "  Style= "  height: 20px  "  />
                <asp:Label ID= "  zt  "  ForeColor= "  Red  "  runat= "  server  " ></asp:Label>
                </td>
            </tr>
        </table>

登陆页js: 这里主要实现点击验证码在重新生成验证码。

 <script language= "  javascript  "  type= "  text/javascript  "  src= "  ./Scripts/jquery-1.4.1.min.js  " ></script>
     <script language= "  javascript  "  type= "  text/javascript  " > 
         function CheckCode() {
             $(  "  #chkCode  " ).attr( "  src  " ,  "  ./CheckCode.aspx?  "  +  Math.random());
         }
 </script>

登陆页面后台.CS

  protected   void  btn_Click( object   sender, EventArgs e)
        {
              string  checkCode = txtCheckCode.Text.Trim();
              string  ischeck = Session[ "  UserCCode  "  ].ToString();
              if  (! string  .IsNullOrEmpty(checkCode)
                   &&  ischeck.Equals(checkCode))
            {
                  this .zt.Text =  "  登陆成功!  "  ;
            }
              else  
            {
                  this .zt.Text =  "  登陆失败!  "  ;
            }
        } 

CheckCode.aspx 验证码检查页面:

 using   System;
  using   System.Collections;
  using   System.Configuration;
  using   System.Data;
  using   System.Linq;
  using   System.Web;
  using   System.Web.Security;
  using   System.Web.UI;
  using   System.Web.UI.HtmlControls;
  using   System.Web.UI.WebControls;
  using   System.Web.UI.WebControls.WebParts;
  using   System.Xml.Linq;
  using   System.Drawing;

  public   partial   class   CheckCode : System.Web.UI.Page
{
      protected   void  Page_Load( object   sender, EventArgs e)
    {
          this  .CreateCheckCodeImage(GenerateCheckCode());
    }

      private   string   GenerateCheckCode()
    {
          int   number;
          char   code;
          string  checkCode =  String.Empty;

        Random random  =  new   Random();

          for  ( int  i =  0 ; i <  5 ; i++ )
        {
            number  =  random.Next();

              if  (number %  2  ==  0  )
                code  = ( char )( '  0  '  + ( char )(number %  10  ));
              else  
                code  = ( char )( '  A  '  + ( char )(number %  26  ));

            checkCode  +=  code.ToString();
        }
          //  Response.Cookies.Add(new HttpCookie("CheckCode", checkCode)); 
        Session[ "  UserCCode  " ] =  checkCode;
          return   checkCode;
    }

      private   void  CreateCheckCodeImage( string   checkCode)
    {
          if  (checkCode ==  null  || checkCode.Trim() ==  String.Empty)
              return  ;

        System.Drawing.Bitmap image  =  new  System.Drawing.Bitmap(( int )Math.Ceiling((checkCode.Length *  14.5 )),  26  );
        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  System.Drawing.Font( "  Arial  " ,  13 , (System.Drawing.FontStyle.Bold |  System.Drawing.FontStyle.Italic));
            System.Drawing.Drawing2D.LinearGradientBrush brush  =  new  System.Drawing.Drawing2D.LinearGradientBrush( new  Rectangle( 0 ,  0 , image.Width, image.Height), Color.Blue, Color.DarkTurquoise,  1.2f ,  true  );
            g.DrawString(checkCode, font, brush,   6 ,  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.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();
        }
    }
} 

实现效果:

源码下载: http://download.csdn.net/detail/njxiaogui/5279096

 

跨线程访问窗体控件

访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。

怎样才算安全?

在给控件赋值或设置前,先看看方法调用时是否必须调用 Invoke 方法。

Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。

 //  委托 
 delegate   void  SetEnableCallback(System.Windows.Forms.Control objCtrl,  bool   enable);
  //  声明 
 private   void  _SetText<TObject>(TObject objCtrl,  string   text)
  where   TObject : System.Windows.Forms.Control
{
    if   (objCtrl.InvokeRequired)
  {
    SetTextCallback d  =  new   SetTextCallback(_SetText);
      this .Invoke(d,  new   object  [] { objCtrl, text });
  }
    else  
  {
    objCtrl.Text  =  text;
  }
}
  //  调用 
 public   int   TotalNum
{
  set  { _SetText<TextBox>( this  .txt_Total, value.ToString()); }
} 

 

 

分类:  学习笔记

 

分类:  .net ,  c# ,  JavaScript ,  其他

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于c#生成随机彩色验证码例子的详细内容...

  阅读:41次