C#创建简单的验证码

首先,创建一个CLASS类,然后需要add Reference的方式添加 System.Drawing(画画的类)

    方法代码如下:

   /**/ ///   <summary>
    
///  定义显示的随机字符
    
///   </summary>
    
///   <param name="strList"></param>
    
///   <returns></returns>
     private   string  imageStr( char [] strList)
        {

            
if  (strList  ==   null )
                strList 
=   " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ " .ToCharArray();

            
int  codeLengh  =   4 ;
            
string  radomCode  =   "" ;
            Random r 
=   new  Random();
            
for  ( int  i  =   0 ; i  <  codeLengh;i ++ )
            {
                radomCode 
+=  strList[r.Next(strList.Length)];
            }
            
return  radomCode;
        }

    
/**/ ///   <summary>
    
///  创建随机验证字符的IMAGE,并保存,同时返回随机字符串
    
///   </summary>
    
///   <param name="iWidth"> 图片宽度 0时,默认为55 </param>
    
///   <param name="iHeight"> 图片高度 0时,默认为22 </param>
    
///   <param name="font"> 字符字体 null时,默认为 "Arial", 12, FontStyle.Bold </param>
    
///   <param name="sb"> 字符颜色 null时,默认为红 </param>
    
///   <param name="ImagePath"> 需要保存的文件绝对路径 </param>
    
///   <param name="strList"> 随即字符库 null时,默认为0-9A-Z </param>
    
///   <returns> 返回随机字符串 </returns>
         public   string  createImgWithStr( int  iWidth, int  iHeight,Font font,SolidBrush sb , string  ImagePath, char [] strList)
        {
            
if  (font  ==   null )
                font 
=   new  Font( " Arial " 12 , FontStyle.Bold);
            
if  (sb  ==   null )
                sb 
=   new  SolidBrush(Color.Red);
            
if  (iWidth  ==   0 )
                iWidth 
=   55 ;
            
if  (iHeight  ==   0 )
                iHeight 
=   22 ;
            
// 得到随机字符串
             string  imageString  =  imageStr(strList);
            
// 定义横向竖向都画4条线
             int  lineCount  =   4 ;
            //这2支笔用来画线条
            Pen pen1 
=   new  Pen(Color.Gold,  1 );
            Pen pen2 
=   new  Pen(Color.Black,  2 );
            
// 定义图片
            Bitmap image  =   new  Bitmap(iWidth, iHeight);
            
// 跟J2ME一样的画笔
            Graphics g  =  Graphics.FromImage(image);
            
// 先画背景色 当然你可以自定义下
            g.Clear(ColorTranslator.FromHtml( " #F0F0F0 " ));
            
// 确定写字的落点
            Rectangle rect  =   new  Rectangle( 5 2 , iWidth, iHeight);

            Random r 
=   new  Random();

            
// 默认随机画横向竖向4条线
             for ( int  i  = 0 ;i < lineCount;i ++ )
            {
                Point p1 
=   new  Point( 0 , r.Next(iHeight));
                Point p2 
=   new  Point(iWidth, r.Next(iHeight));
                Point p3 
=   new  Point(r.Next(iWidth),  0 );
                Point p4 
=   new  Point(r.Next(iWidth), iHeight);
                g.DrawLine(pen1, p1, p2);
                g.DrawLine(pen2, p3, p4);
            }
            
// 写字
            g.DrawString(imageString, font, sb, rect);
           
// 删除源文件
             if  (File.Exists(ImagePath))
                File.Delete(ImagePath);
            
// 保存文件,我定义为jpeg格式
            image.Save(ImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
            
// 释放资源
            g.Dispose();
            image.Dispose();

            
return  imageString;
        }


    另外,我在实际运用过程中总是发现重新生成了图片,但是显示却还是以前那张,最后在网上找到了答案:原本的<asp:Image ID="Image1" runat="server" ImageUrl="~/a.jpg" />改成<asp:Image ID="Image1" runat="server" ImageUrl="~/a.jpg?temp=<%=  DateTime.Now.Ticks%>" />就能够自动更新了……另外代码段中的<%=  DateTime.Now.Ticks%> 不能改成<%=DateTime.Now.Ticks%> 少了一个空格就挂了,谁能告诉我为什么呢??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值