[转]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(52, 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%> 少了一个空格就挂了,谁能告诉我为什么呢??

posted @ 2008-08-05 17:40  eecc  阅读(183)  评论(0)    收藏  举报