神奇的"驗證碼"

一、驗證碼(CAPTCHA)

是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序

可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多網站通行的方式,我們利用比較簡易的方式實現了這個功能。這個問題可以由計算機生成並評判,但是必須只有人類才能解答。由於計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認爲是人類。

二、C#代碼實現數字驗證碼

<span style="font-size:18px;"> private void picString_Click(object sender, EventArgs e)
        {
            Random r = new Random();//返回非負隨機數。

            string strNumber = "";//定義一個字符串存隨機數

            for (int i = 0; i < 5; i++)
            {
                int num = r.Next(10);//返回一個小於10的非負隨機數。
                //把隨機數都存到這個字符串中
                strNumber += num;
                
            }

          
            //創建一個位圖用來存驗證碼
            Bitmap bm = new Bitmap(110, 30);
            //創建這個對象
            Graphics g = Graphics.FromImage(bm);
            //畫驗證碼

            // 需要五種字體 
            string[] fontName = new string[] {"幼圓","全新硬筆行書簡","華文彩雲","宋體",
                "方正舒體" };

            //需要五種顏色
            Color[] color = new Color[] { Color.Red,Color.Blue,Color.Green,
                Color.Pink,Color.Black};

            for (int i = 0; i < 5; i++)
            {
                Point point=new Point(i*20,0);//畫的起點不同定義的一個座標
                g.DrawString(strNumber[i].ToString(), new Font(fontName[i], 20), 
                    new SolidBrush(color[i]),point);
            }
            //畫線
            for (int i = 0; i < 25; i++)
            {
                //r.Next(bm.Width),r.Next(bm.Height) 位圖內點的座標

                Point p_1 = new Point(r.Next(bm.Width), r.Next(bm.Height));//返回位圖一點

                Point p_2 = new Point(r.Next(bm.Width), r.Next(bm.Height));//返回位圖另一點
                g.DrawLine(new Pen(Brushes.Gray),p_1,p_2);//畫直線
            }

            //畫點
            for (int i = 0; i < 50; i++)
            {
                 Point p_1 = new Point(r.Next(bm.Width), r.Next(bm.Height));
                 bm.SetPixel (p_1.X, p_1.Y, Color.Yellow);//獲取位圖 指定顏色
            }
            picString.Image = bm;
            

            //MessageBox.Show(strNumber);
        }</span>
三、小結:這種方法是利用位圖來存儲驗證數字,並加了隨機的點和線,單擊piturebox控件會觸發事件,最後也是用piturebox中的Image接收的位圖。

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