asp.net繪製驗證碼

最近做一個小型門戶網站,登錄需要用到驗證碼 網上找了一大推發現都不適合,

所以看書學習,自己做了一個驗證碼控件:

好了不YY了,直接上代碼

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Bogin
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                Session["yanzhenma"] = CreateranDomNum(6);
                getImages(Session["yanzhenma"].ToString());
            }
        }
        #region 獲得隨機函數
        /// <summary>
        /// 獲得隨機函數
        /// </summary>
        /// <param name="Number">生成隨機函數的位數</param>
        /// <returns> 返回一個隨機數</returns>
        public static string CreateranDomNum(int Number)
        {
            string allChar = "0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
            string[] allarray = allChar.Split(',');
            string randomNumber = "";
            int temp = -1;
            Random rand = new Random();
            for (int i = 0; i < Number; i++)
            {
                if (temp != -1)
                {
                    rand = new Random(i * temp * (int)DateTime.Now.Ticks);
                }
                int t = rand.Next(35);
                if (temp == t)
                {
                    return CreateranDomNum(Number);
                }
                temp = t;
                randomNumber += allarray[t];
            }
            return randomNumber;
        }
        #endregion
        private void getImages(string dateNumber)
        {
            if (dateNumber.Trim().Length == 0)
            {
                return;
            }
            Bitmap img = new Bitmap(dateNumber.Length*12 + 10, 22); //生成bitmap圖像
            Graphics g = Graphics.FromImage(img); //設置生成的圖片格式
            try
            {
                Random rand = new Random(); //生成隨機生成器
                g.Clear(Color.White); //清空圖片背景色
                //畫圖片的背景噪音線
                for (int i = 0; i < 25; i++)
                {
                    int x1 = rand.Next(img.Width);
                    int x2 = rand.Next(img.Width);
                    int y1 = rand.Next(img.Height);
                    int y2 = rand.Next(img.Height);
                    g.DrawLine(new Pen(Color.Coral), x1, y1, x2, y2);
                }
                //設置背景字體樣式
                Font font = new Font("Arial", 12, FontStyle.Bold | FontStyle.Italic);
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height),
                                                                    Color.Red, Color.DarkRed, 1.2f, true);
                g.DrawString(dateNumber, font, brush, 2, 2);
                for (int i = 0; i < 100; i++)
                {
                    int x = rand.Next(img.Width);
                    int y = rand.Next(img.Height);
                    img.SetPixel(x, y, Color.FromArgb(rand.Next())); //繪製前景噪音點
                }
                //畫圖片的邊框線
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, img.Width - 1, img.Height - 1);
                MemoryStream ms = new MemoryStream();
                //將圖像保存到指定的流
                img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType = "img/gif";
                Response.BinaryWrite(ms.ToArray());
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                g.Dispose();
                img.Dispose();
            }
        }
    }
}

引用的話,直接新建一個頁面,裏面加一個img標籤 把img標籤的url引用到本頁面的URL即可

效果圖如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章