asp.net验证码-拿来主义,直接就能用

来源:互联网 发布:新后缀域名 编辑:程序博客网 时间:2024/05/22 17:10
 
   这里我写好了asp.net验证码,直接可以用在自己的项目中,这样避免了下次重新再写,也就是我们常说的拿来主义,拿来归拿来,总要学习点东西吧,这里也跟大家讲解一下应用到那些比较重要的知识点:
 一:注意命名空间的引用
     using System.Drawing;
 using System.Drawing.Drawing2D;
  using System.Drawing.Imaging;
这些空命名空间直接与我们写的画图有关的类
二:应用到了的一些类
Bitmap :类来生成图片类
Graphics :绘图类,来操作生成的图片比如应用它的DrawLine()方法来划线,应用它的DrawString()方法来实现写字符串不过在这里就要注意写字符串之前要先声明画刷写字符串:声明画刷   System.Drawing.Drawing2D.LinearGradientBrush brush ;
         它的DrawRectangle()方法画巨型边框最后主要保存生成位图类Bitmap的Save()方法来实现,对了还有需要画躁点的话,也是利用生成位图类Bitmap类的SetPixel()方法来实现的。下面就是已经写好的生成验证码的类,大家可以直接拿来用,也是为了方便我在今后工作和学习当中直接就能用的。
 

using System;
using System.Web;
using System.Web.Security;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public partial class validate_img : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateCheckCodeImage(GenerateCheckCode());
    }
    /// <summary>
    /// 生成字符串
    /// </summary>
    /// <returns></returns>
    private string GenerateCheckCode()
    {
        int number;
        char code; //字符码
        string checkCode = String.Empty,sendcoder;
        System.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();
        }
        sendcoder = checkCode.ToLower();
        //把字符串放进cookie里
        Response.Cookies.Add(new HttpCookie("CheckCode", sendcoder));
        return checkCode;
    }

    /// <summary>
    /// 生成图片
    /// </summary>
    /// <param name="checkCode"></param>
    public 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 * 13.5)), 25);//高为25
        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.GreenYellow), x1, y1, x2, y2);
            }
            //写字符
            Font font = new System.Drawing.Font("Verdana", 12, (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.DarkRed, 1.2f, true);
            g.DrawString(checkCode, font, brush, 2, 2);

            //画图片的前景噪音点
            for (int i = 0; i < 80; 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.Red), 0, 0, image.Width - 1, image.Height - 1);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ContentType = "image/Gif";
            HttpContext.Current.Response.BinaryWrite(ms.ToArray());    
        }
        finally
        {
            g.Dispose();
            image.Dispose();
        }
    }

}

原创粉丝点击