ASP.NET驗證碼C#

來源:互聯網
上載者:User

1、編寫類CreateImage.cs
2、在頁面Image.aspx中輸出驗證圖片,即是調用函數:CreateImage.DrawImage();
3、在圖片中使用:src=Image.aspx
4、檢驗Session:Session["CheckCode"]
以下是產生驗證碼的類:CreateImage.cs
using System;
using System.IO;
using System.Web;
using System.Drawing;
namespace ZCJ168.App_Code
{
    /// <summary>
    /// 驗證碼模組
    /// </summary>
    public class CreateImage
    {
        public static void DrawImage()
        {
            CreateImage img=new CreateImage();
            HttpContext.Current.Session["CheckCode"]=img.RndNum(5);
            img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
        }

        /// <summary>
        /// 產生驗證圖片
        /// </summary>
        /// <param name="checkCode">驗證字元</param>
        private void CreateImages(string checkCode)
        {
            int iwidth = (int)(checkCode.Length * 14);
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
            Graphics g = Graphics.FromImage(image);
            g.Clear(Color.White);
            //定義顏色
            Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
            //定義字型
            string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋體"};
            Random rand = new Random();
            //隨機輸出噪點
            for(int i=0;i<50;i++)
            {
                int x = rand.Next(image.Width);
                int y = rand.Next(image.Height);
                g.DrawRectangle(new Pen(Color.GreenYellow, 0),x,y,1,1);
            }

            //輸出不同字型和顏色的驗證碼字元
            for(int i=0;i<checkCode.Length;i++)
            {
                int cindex = rand.Next(7);
                int findex = rand.Next(5);

                Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
                Brush b = new System.Drawing.SolidBrush(c[cindex]);
                int ii=4;
                if((i+1)%2==0)
                {
                    ii=2;
                }
                g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
            }
            //畫一個邊框
            g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);

            //輸出到瀏覽器
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
            HttpContext.Current.Response.ClearContent();
            //Response.ClearContent();
            HttpContext.Current.Response.ContentType = "image/Jpeg";
            HttpContext.Current.Response.BinaryWrite(ms.ToArray());
            g.Dispose();
            image.Dispose();
        }

        /// <summary>
        /// 產生隨機的字串
        /// </summary>
        /// <param name="VcodeNum">產生字母的個數</param>
        /// <returns>string</returns>
        private string RndNum(int VcodeNum)
        {
            string Vchar = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,y,v,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9" ;
            string[] VcArray = Vchar.Split(',') ;
            string VNum = "" ; //由於字串很短,就不用StringBuilder了
            int temp = -1 ; //記錄上次隨機數值,盡量避免生產幾個一樣的隨機數

            //採用一個簡單的演算法以保證產生隨機數的不同
            Random rand =new Random();
            for ( int i = 1 ; i < VcodeNum+1 ; i++ )
            {
                if ( temp != -1)
                {
                    rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
                }
                int t = rand.Next(VcArray.Length ) ;
                if (temp != -1 && temp == t)
                {
                    return RndNum( VcodeNum );
                }
                temp = t ;
                VNum += VcArray[t];
            }
            return VNum ;
        }
    }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.