简单的写验证码

来源:互联网 发布:巨人网络 小怪兽 编辑:程序博客网 时间:2024/05/16 08:27

最近做了个验证码,分享出来

在Login.aspx中放置一个TextBox(用来输入验证码),Image(是Html控件),并设置Image控件的src为gif.aspx即可。

在登录事件中:

if(Sesstion["regcode"].ToString().toLower()==textbox1.Text.ToLower())

{

   验证通过...

}

在gif.aspx下: 

protected void Page_Load(object sender, EventArgs e)
    {
        string strKey = "";
        byte[] data = GenerateImage(6, ref strKey);
        Session["regcode"] = strKey;
        Response.OutputStream.Write(data, 0, data.Length);

    }
    private byte[] GenerateImage(int nLen, ref string strKey)
    {
        int nBmpWidth = 13 * nLen + 5;
        int nBmpHeight = 25;
        Bitmap bmp = new Bitmap(nBmpWidth, nBmpHeight);
        //1、生成随即背景颜色
        int nRed, nGreen, nBlue;
        Random rd = new Random((int)DateTime.Now.Ticks);
        nRed = rd.Next(255) % 128 + 128;
        nGreen = rd.Next(255) % 128 + 128;
        nBlue = rd.Next(255) % 128 + 128;
        //2、填充位图背景
        Graphics graph = Graphics.FromImage(bmp);
        graph.FillRectangle(new SolidBrush(Color.FromArgb(nRed, nGreen, nBlue)), 0, 0, nBmpWidth, nBmpHeight);
        //3、画图片的背景噪音线
        int nLines = 10;
        Pen pen = new Pen(Color.FromArgb(nRed, nGreen, nBlue));
        for (int i = 0; i < nLines; i++)
        {
            int x1 = rd.Next() % nBmpWidth;
            int y1 = rd.Next() % nBmpHeight;
            int x2 = rd.Next() % nBmpWidth;
            int y2 = rd.Next() % nBmpHeight;
        }
        //采用的字符集
        string strCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        //4、循环取得字符并输出
        string strResult = "";
        for (int i = 0; i < nLen; i++)
        {
            int x = (i * 13) + rd.Next(3);
            int y = rd.Next(4) + 1;
            //确定字体
            Font font = new Font("arial", 12 + rd.Next() % 4, FontStyle.Bold);
            char c = strCode[rd.Next(strCode.Length)];
            strResult += c.ToString();
            //绘制字符
            graph.DrawString(c.ToString(), font, new SolidBrush(Color.FromArgb(nRed - 60 + y * 3, nGreen - 60 + y * 3, nBlue - 40 + y * 3)), x, y);
        }
        //画图片的前景噪音点
        for (int i = 0; i < 10; i++)
        {
            int x = rd.Next(bmp.Width);
            int y = rd.Next(bmp.Height);
            bmp.SetPixel(x, y, Color.FromArgb(rd.Next()));
        }
        //画图片的边框线
        graph.DrawRectangle(new Pen(Color.Silver), 0, 0, bmp.Width - 1, bmp.Height - 1);
        //输出
        System.IO.MemoryStream bstream = new System.IO.MemoryStream();
        bmp.Save(bstream, System.Drawing.Imaging.ImageFormat.Jpeg);
        bmp.Dispose();
        graph.Dispose();
        strKey = strResult;
        byte[] byteReturn = bstream.ToArray();
        bstream.Close();
        return byteReturn;
    }

原创粉丝点击