zoukankan      html  css  js  c++  java
  • Asp.Net 动态生成验证码

    我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,生成效果如图: 

       使用方法:
             1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy进去;
             2、再新建一个Web窗体,如“Image.aspx”,在Page_Load中加入代码 “CreateImage.DrawImage ();”当然别忘了加上对类的引用哦!!
             3、在页面的合适位置上(你想放验证码的位置)上加上如下javascript代码就OK 了,
                 <SCRIPT LANGUAGE="JavaScript">
                    <!--
                        var numkey = Math.random();
                        numkey = Math.round(numkey*10000);
                        document.write("<img src=\"Image.aspx?k="+ numkey +"\" width=\"52\" height=\"23\" hspace=\"4\"");
                    //-->
                 </SCRIPT>

    源代码如下:

    /// <summary>
    /// 验证码模块
    /// </summary>
    public class CreateImage
    {
    public static void DrawImage()
    {
    CreateImage img=new CreateImage();
    HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
    img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
    }

    /// <summary>
    /// 生成验证图片
    /// </summary>
    /// <param name="checkCode">验证字符</param>
    private void CreateImages(string checkCode)
    {
    int iwidth = (int)(checkCode.Length * 13);
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
    Graphics g = Graphics.FromImage(image);
    g.Clear(Color.White);
    //定义颜色
    Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
    //定义字体
    string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
    Random rand = new Random();
    //随机输出噪点
    for(int i=0;i<50;i++)
    {
    int x = rand.Next(image.Width);
    int y = rand.Next(image.Height);
    g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
    }

    //输出不同字体和颜色的验证码字符
    for(int i=0;i<checkCode.Length;i++)
    {
    int cindex = rand.Next(7);
    int findex = rand.Next(5);

    Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
    Brush b = new System.Drawing.SolidBrush(c[cindex]);
    int ii=4;
    if((i+1)%2==0)
    {
    ii=2;
    }
    g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
    }
    //画一个边框
    g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);

    //输出到浏览器
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    HttpContext.Current.Response.ClearContent();
    //Response.ClearContent();
    HttpContext.Current.Response.ContentType = "image/Jpeg";
    HttpContext.Current.Response.BinaryWrite(ms.ToArray());
    g.Dispose();
    image.Dispose();
    }

    /// <summary>
    /// 生成随机的字母
    /// </summary>
    /// <param name="VcodeNum">生成字母的个数</param>
    /// <returns>string</returns>
    private string RndNum(int VcodeNum)
    {
    string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
    string[] VcArray = Vchar.Split(',') ;
    string VNum = "" ; //由于字符串很短,就不用StringBuilder了
    int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数

    //采用一个简单的算法以保证生成随机数的不同
    Random rand =new Random();
    for ( int i = 1 ; i < VcodeNum+1 ; i++ )
    {
    if ( temp != -1)
    {
    rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
    }
    int t = rand.Next(VcArray.Length ) ;
    if (temp != -1 && temp == t)
    {
    return RndNum( VcodeNum );
    }
    temp = t ;
    VNum += VcArray[t];
    }
    return VNum ;
    }
    }

    做了一个简单的Asp.Net 动态生成验证码实例,包括源代码,可以正常使用,如之前有运行不成功的,可以到此下载学习!

    点击下载此文件

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/Athrun/p/661124.html
Copyright © 2011-2022 走看看