安全中国首页 > 编程中心 > VC/C++编程
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

C#创建简单的验证码

更新时间:2008-7-14 15:36:51
责任编辑:ShellExp
热 点:

   首先,创建一个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%> 少了一个空格就挂了,谁能告诉我为什么呢??

 
学习软件编程开发技术,推荐加入以下软件编程培训班:
易语言软件编程培训班(简单易学)  Delphi软件编程培训班  VC++软件编程培训班
VB软件编程培训班  JAVA高端编程就业研发班

学习网站开发制作技术,推荐加入以下网站开发培训班:
ASP.net网站开发项目实战班  ASP语言网站建设培训班

学习网络安全入侵防护技术,推荐加入以下技术培训班:
大型网络安全入侵防护班  网站脚本程序全方位安全检测班

学习网络管理、网吧运营维护技术(网管),推荐加入以下培训班:
大型网吧技术管理人才特训班  Linux网络嵌入架构工程师培训班

学习专项特殊技术,推荐加入以下专项技术培训班:
软件与游戏外挂脱壳破解班(逆向工程)  赚钱王道-网赚技能培训班  Flash动画设计师就业特训班

 
相关编程
一日一文章
 
一日一软件
一日一动画