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

 

登录验证码其实可以分为两个部分,一是生产一组随机数,二是将这组随机数画出来。当然利用了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进制字符串写入到输出流中
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值