讲解ASP.NET图片验证码方法

虽然我认为图片验证码没有什么用,并且也特别的烦人(每次上移动的网站都要频频地输入验证码),但人家要求,也只好弄一个。    生成图片验证码页面createImg.aspx,验证页面Default.aspx.
   
    CreateImg.aspx页面使用的各个函数如下:
   
    string getRandomValidate(int len) 得到随机长度为len的字符串
   
    drawLine(Graphics gfc,Bitmap img) 在图片中画底线
   
    drawPoint(Bitmap img) 在图片中画杂点(移动画的杂点挺好不错)
   
    getImageValidate(string strValue) 使用getRandomValidate函数返回的字符串生成图片
   
    其具体实现代码如下所示:
   
    using System.Drawing;
   
    using System.IO;
   
    public partial class createImg : System.Web.UI.Page
   
    {
   
    Random ran = new Random();
   
    protected void Page_Load(object sender, EventArgs e)
   
    {
   
    string str = getRandomValidate(4);
   
    Session["check"] = str; //这一步是为了将验证码写入Session,进行验证,不能缺省,也可一使用cookie
   
    getImageValidate(str);
   
    }
   
    //得到随机字符串,长度自己定义
   
    private string getRandomValidate(int len)
   
    {
   
    int num;
   
    int tem;
   
    string rtuStr = "";
   
    for (int i = 0; i < len; i++)
   
    {
   
    num = ran.Next();
   
    /*
   
    * 这里可以选择生成字符和数字组合的验证码
   
    */
   
    tem = num % 10 + '0';//生成数字
   
    //tem = num % 26 + 'A';//生成字符
   
    rtuStr += Convert.ToChar(tem)。ToString();
   
    }
   
    return rtuStr;
   
    }
   
    //生成图像
   
    private void getImageValidate(string strValue)
   
    {
   
    //string str = "OO00"; //前两个为字母O,后两个为数字0
   
    int width = Convert.ToInt32(strValue.Length * 12); //计算图像宽度
   
    Bitmap img = new Bitmap(width, 23);
   
    Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图
   
    gfc.Clear(Color.White);
   
    drawLine(gfc, img);
//写验证码,需要定义Font
   
    Font font = new Font("arial", 12, FontStyle.Bold);
   
    System.Drawing.Drawing2D.LinearGradientBrush brush =
   
    new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true);
   
    gfc.DrawString(strValue, font, brush, 3, 2);
   
    drawPoint(img);
   
    gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
//将图像添加到页面
   
    MemoryStream ms = new MemoryStream();
   
    img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
   
    //更改Http头
   
    Response.ClearContent();
   
    Response.ContentType = "image/gif";
   
    Response.BinaryWrite(ms.ToArray());
   
    //Dispose
   
    gfc.Dispose();
   
    img.Dispose();
   
    Response.End();
   
    }
   
    private void drawLine(Graphics gfc,Bitmap img)
   
    {
   
    //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可
   
    for (int i = 0; i < 10; i++)
   
    {
   
    int x1 = ran.Next(img.Width);
   
    int y1 = ran.Next(img.Height);
   
    int x2 = ran.Next(img.Width);
   
    int y2 = ran.Next(img.Height);
   
    gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚
   
    }
   
    }
   
    private void drawPoint(Bitmap img)
   
    {
   
    /*
   
    //选择画100个点,可以根据实际情况改变
   
    for (int i = 0; i < 100; i++)
   
    {
   
    int x = ran.Next(img.Width);
   
    int y = ran.Next(img.Height);
   
    img.SetPixel(x,y,Color.FromArgb(ran.Next()));//杂点颜色随机
   
    }
   
    */
   
    int col = ran.Next();//在一次的图片中杂店颜色相同
   
    for (int i = 0; i < 100; i++)
   
    {
   
    int x = ran.Next(img.Width);
   
    int y = ran.Next(img.Height);
   
    img.SetPixel(x, y, Color.FromArgb(col));
   
    }
   
    }
   
    }
如何使用:
更多http://www.cnblogs.com/phpmisishtml/    
    新建一个页面,至少需要一个文本框、image控件和一个Button控件。需要注意的是要将image控件的imageUrl指定为createImg.aspx,如下所示
   
    <asp:Image ID="Image1" runat="server" ImageUrl="~/createImg.aspx" />
   
    其测试就很简单了,就像平时使用Session一样,饿,还记得createImg页面中有一个Session["check"]吗?该页面已经注册了一个会话,那么在Default页面中只需简单的比较以下就可以了。
   
    protected void Page_Load(object sender, EventArgs e)
   
    {
   
    if (Session["check"] == null)
   
    message.Text = "sorry,the image is wrong!";
   
    }
   
    protected void checkButton_Click(object sender, EventArgs e)
   
    {
   
    if (check.Text.ToString() == Session["check"].ToString())
   
    message.Text = "Yes,you pass it";
   
    else
   
    message.Text = "I'm sorry!try again…";
   
    }

你可能感兴趣的:(字符串,图片,最好,输入验证码)