使用ASP.NET寫帶驗證碼的網頁

來源:互聯網
上載者:User

        驗證碼是一個圖片,將字母、數字甚至漢字作為圖片的內容,這樣一張圖片中的內容用人眼很容易識別,而程式將無法識別。在進行資料庫操作之前(比如登入驗證、投票、發帖、回複、註冊等等)程式首先驗證用戶端提交的驗證碼是否與圖片中的內容相同,如果相同則進行資料庫操作,不同則提示驗證碼錯誤,不進行資料庫操作。這樣各種機器人程式就被拒之門外了!

         驗證碼的內容必須儲存在伺服器端,一般我們可以將隨機產生的驗證碼的內容放入Session中,使用者提交的時候將提交的內容與Session中的驗證碼進行比較判斷。在產生驗證碼的頁面後台代碼可以寫為:

         protected void Page_Load(object sender, EventArgs e)
             {
                  string checkCode = CreateRandomCode(6);        
                  Session["CheckCode"] = checkCode;
                  CreateImage(checkCode);
             }

       //產生codeCount位的校正碼

        private string CreateRandomCode(int codeCount)
       {
        string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
        string[] allCharArray = allChar.Split(',');
        string randomCode = "";
        int temp = -1;

        Random rand = new Random();
        for (int i = 0; i < codeCount; i++)
        {
            if (temp != -1)
            {
                rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
            }
            int t = rand.Next(35);
            if (temp == t)
            {
                return CreateRandomCode(codeCount);
            }
            temp = t;
            randomCode += allCharArray[t];
        }
        return randomCode;
    }

   //產生映像

    private void CreateImage(string checkCode)
    {
        int iwidth = (int)(checkCode.Length * 11.5);
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
        Graphics g = Graphics.FromImage(image);
        Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
        Brush b = new System.Drawing.SolidBrush(Color.White);
        //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
        g.Clear(Color.Blue);
        g.DrawString(checkCode, f, b, 3, 3);

        //Pen blackPen = new Pen(Color.Black, 0);
        //Random rand = new Random();
        //for (int i = 0; i < 5; i++)
        //{
        //    int y = rand.Next(image.Height);
        //    g.DrawLine(blackPen, 0, y, image.Width, y);
        //}

        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        Response.ClearContent();
        Response.ContentType = "image/Jpeg";
        Response.BinaryWrite(ms.ToArray());
        g.Dispose();
        image.Dispose();
    }

 

   用戶端可以這樣寫:

   1、先拖一個Image控制項在網頁中,注意修改其ImageUrl屬性為伺服器的頁面。

   2、拖動相應的控制項進入網頁,編輯按鈕事件:

      protected void Button1_Click(object sender, EventArgs e)
     {
        if ((this.TextBox1.Text == "rocket5725") && (this.TextBox2.Text == "rocket5725") && (this.TextBox3.Text == Session["CheckCode"].ToString()))
        {
            Response.Redirect("http://www.sina.com.cn");
        }
        else
            Response.Write("錯誤");
      }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.