您的位置:首页 > 编程语言 > ASP

用ASP.NET实现验证码的制作

2011-10-24 22:02 387 查看
 

登录验证码其实可以分为两个部分,一是生产一组随机数,二是将这组随机数画出来。当然利用了C#的绘图功能。

所以现在自定义两个函数,

CreateCheckCode()//该函数用于产生一组随机数,及验证码

createcheckcodeImage(string CheckCode)//该函数用于画一张图片,而参数CheckCode则是之前随机产生的验证码

using System.Drawing;

public partial class CheckCode : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {   //在网页一加载的时候便调用这两个函数,以产生验证码

        createcheckcodeImage(CreateCheckCode());

    }

    public String CreateCheckCode()

    {

        int number;

        char code;

        Random randomnumber=new Random();//C#中使用随机数时声明一个Random类的对象,而Java直接使用Math.random()

        String CheckCode = String.Empty;//声明一个字符串,并把它置为空。

        for(int i=0;i<4;i++)//i值控制验证码的位数,这里设置为4位

        {

            number = randomnumber.Next();//产生一个随机数

            //以下方法用来判断显示数字还是字母,当然也可以自己设计其他方法。48和55为ASCII码

            number=number % 36;

            if (number < 10)

            {

                number += 48;

            }

            else

            {

                number += 55;

            }

            CheckCode += ((char)number).ToString();//number为Int,转换为char后在相加就成了字符串数组.

        }

        return CheckCode;

    }

    public void createcheckcodeImage(string CheckCode)

    {

        System.Drawing.Bitmap image = new System.Drawing.Bitmap(55, 20);//创建一张Bitmap类型的图片对象。两个参数为图片大小

        Graphics g = Graphics.FromImage(image);//从指定的 Image 创建新的 Graphics,Graphics 类提供将对象绘制到显示设备的方法                                               //Graphics 与特定的设备上下文关联。

        Random random = new Random();

        g.Clear(Color.White);//将图片清空

        //验证码上有一些干扰的线,以下便是画这些线,i控制画线的条数,作用是干扰视觉

        for (int i = 0; i < 10; i++)

        {

            //利用随机数产生画线要用的4个坐标,Next里面的参数是随机数的最大值,当然不能超过图片的范围。

            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.Silver),x1,y1,x2,y2);//详见MSDN中的DrawLine函数

        }

            Font font = new Font("Arial",12,(FontStyle.Bold|FontStyle.Italic));//创建字体的对象,利用了Font的构造函数,详见MSDN

            //创建渐变笔刷,利用了LinearGradientBrush的构造函数,详见MSDN

            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);//绘制验证码,应为DrawString函数有参数font和brush,所以要在前面构造

            for (int i = 0; i < 10; 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.Peru), 0, 0, image.Width - 1, image.Height - 1);//绘制由坐标对、宽度和高度指定的矩形

            System.IO.MemoryStream ms = new System.IO.MemoryStream();// 创建其支持存储区为内存的流。

            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//将此图像以指定的格式保存到指定的流中。

            Response.ClearContent();//清除缓冲区流中的所有内容输出。

            Response.ContentType = "image/GIF";//获取或设置输出流的 HTTP MIME 类型

            Response.BinaryWrite(ms.ToArray());//该2进制字符串写入到输出流中

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息