日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. <tr id="4k3ku"></tr>
        西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
        軟件
        軟件
        文章
        搜索

        首頁編程開發(fā)C#.NET → C# 實(shí)現(xiàn)彩色驗(yàn)證碼圖片功能代碼

        C# 實(shí)現(xiàn)彩色驗(yàn)證碼圖片功能代碼

        相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:本站整理時(shí)間:2010/12/21 17:30:30字體大。A-A+

        作者:佚名點(diǎn)擊:359次評(píng)論:0次標(biāo)簽: 驗(yàn)證碼 賬號(hào)密碼 服務(wù)器資源

        1010 彩色星星 蘋果版v1.0.0 官方ios版
        • 類型:休閑益智大。22.1M語言:中文 評(píng)分:10.0
        • 標(biāo)簽:
        立即下載

         1、為什么要加驗(yàn)證碼?

        因?yàn)榧恿蓑?yàn)證碼可以防御別人攻擊你的網(wǎng)站,舉個(gè)例子:別人可以用webbrowser控件做一個(gè)模擬瀏覽器,并且模擬提交表單(模擬填寫表單資料和點(diǎn)擊提交按鈕),那么你的服務(wù)器必須接收這些表單傳過來的值,并且做判斷,是否正確。這樣一來,別人可以無限占用你的服務(wù)器資源,而且賬號(hào)密碼都不安全,萬一被別人搞個(gè)循環(huán)1個(gè)1個(gè)賬號(hào)輪詢的話,很有可能讓別人破解了你的資料信息,所以安全性稍微高點(diǎn)的網(wǎng)站登錄都有彩色圖片驗(yàn)證碼。

        2、為什么彩色驗(yàn)證碼圖片可以防御別人的攻擊?
        因?yàn)楫?dāng)別人用輪詢技術(shù)模擬登錄的時(shí)候,他并不知道你的驗(yàn)證碼是什么,也獲取不到,因?yàn)檫@是一張圖片,電腦并不能識(shí)別里面的數(shù)字是什么(除非破解驗(yàn)證碼里面的干擾,再利用相關(guān)的圖片識(shí)別技術(shù)有可能讀出驗(yàn)證碼,這里先不扯這個(gè))。讀不出驗(yàn)證碼就沒有機(jī)會(huì)輪詢訪問了,當(dāng)然我們后臺(tái)判斷的時(shí)候一定要先判斷驗(yàn)證碼是否正確,以防止占用服務(wù)器資源。

        3、隨機(jī)數(shù) Code
        ①數(shù)字隨機(jī)數(shù)
        1 /// <summary>
        2 /// 數(shù)字隨機(jī)數(shù)
        3 /// </summary>
        4 /// <returns></returns>
        5 private string GetRndNum()
        6 {
        7 string code = string.Empty;
        8 Random random = new Random();
        9 for (int i = 0; i < 4; i++)
        10 {
        11 code = code + random.Next(9).ToString();
        12 }
        13 return code;
        14 }

        ②字符串隨機(jī)數(shù)
        1 /// <summary>
        2 /// 字符串驗(yàn)證碼
        3 /// </summary>
        4 /// <returns></returns>
        5 private string GetRndStr()
        6 {
        7 string Vchar = "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";
        8 string[] VcArray = Vchar.Split(',');
        9 string checkCode = string.Empty;
        10 Random rand = new Random();
        11 for (int i = 0; i < 4; i++)
        12 {
        13 rand = new Random(unchecked((int)DateTime.Now.Ticks));//為了得到不同的隨機(jī)序列
        14 int t = rand.Next(VcArray.Length);// The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to zero,下標(biāo)從0開始
        15 checkCode += VcArray[t];
        16 }
        17 return checkCode;
        18 }


        ③中文隨機(jī)數(shù)
        1 /// <summary>
        2 /// 隨機(jī)中文碼
        3 /// </summary>
        4 /// <returns></returns>
        5 private string GetRndCh()
        6 {
        7 System.Text.Encoding gb = System.Text.Encoding.Default;//獲取GB2312編碼頁(表)
        8 object[] bytes = CreateRegionCode(4);//調(diào)用函數(shù)產(chǎn)生4個(gè)隨機(jī)中文漢字編碼
        9 string[] str = new string[4];
        10 System.Text.StringBuilder sb = new System.Text.StringBuilder();
        11 for (int i = 0; i < 4; i++)
        12 {
        13 //根據(jù)漢字編碼的字節(jié)數(shù)組解碼出中文漢字
        14 str[i] = gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));
        15 sb.Append( str[i].ToString());
        16 }
        17 return sb.ToString ();
        18 }
        19
        20
        21 /// <summary>
        22 /// 產(chǎn)生隨機(jī)中文漢字編碼
        23 /// </summary>
        24 /// <param name="strlength"></param>
        25 /// <returns></returns>
        26 private static object[] CreateRegionCode(int strlength)
        27 {
        28 //定義一個(gè)字符串?dāng)?shù)組儲(chǔ)存漢字編碼的組成元素
        29 string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
        30 Random rnd = new Random();
        31 object[] bytes = new object[strlength];
        32
        33 for (int i = 0; i < strlength; i++)
        34 {
        35 //區(qū)位碼第1位
        36 int r1 = rnd.Next(11, 14);
        37 string str_r1 = rBase[r1].Trim();
        38
        39 //區(qū)位碼第2位
        40 rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);
        41 int r2;
        42 if (r1 == 13)
        43 {
        44 r2 = rnd.Next(0, 7);
        45 }
        46 else
        47 {
        48 r2 = rnd.Next(0, 16);
        49 }
        50 string str_r2 = rBase[r2].Trim();
        51
        52 //區(qū)位碼第3位
        53 rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);//更換隨機(jī)種子
        54 int r3 = rnd.Next(10, 16);
        55 string str_r3 = rBase[r3].Trim();
        56
        57 //區(qū)位碼第4位
        58 rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
        59 int r4;
        60 if (r3 == 10)
        61 {
        62 r4 = rnd.Next(1, 16);
        63 }
        64 else if (r3 == 15)
        65 {
        66 r4 = rnd.Next(0, 15);
        67 }
        68 else
        69 {
        70 r4 = rnd.Next(0, 16);
        71 }
        72 string str_r4 = rBase[r4].Trim();
        73
        74 //定義兩個(gè)字節(jié)變量存儲(chǔ)產(chǎn)生的隨機(jī)漢字區(qū)位碼
        75 byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
        76 byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
        77
        78 //將兩個(gè)字節(jié)變量存儲(chǔ)在字節(jié)數(shù)組中
        79 byte[] str_r = new byte[] { byte1, byte2 };
        80
        81 //將產(chǎn)生的一個(gè)漢字的字節(jié)數(shù)組放入object數(shù)組中
        82 bytes.SetValue(str_r, i);
        83 }
        84 return bytes;
        85 }
        4、現(xiàn)在有了素材(隨機(jī)數(shù)),那么再加上圖片和困擾就完成了彩色圖片驗(yàn)證碼--困擾背景+圖片Code

        1 /// <summary>
        2 /// 畫圖片的背景圖,干擾
        3 /// </summary>
        4 /// <param name="checkCode"></param>
        5 /// <returns></returns>
        6 private Bitmap CreateImages(string checkCode,string type)
        7 {
        8 int step=0;
        9 if(type=="ch")
        10 {
        11 step=5;//中文字符比較大,所以字距要比較大
        12 }
        13 int iwidth = (int)(checkCode.Length * (13 + stepw));
        14 System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 22);
        15 Graphics g = Graphics.FromImage(image);
        16
        17 g.Clear(Color.White);//清除背景色
        18
        19 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };//定義隨機(jī)顏色
        20
        21 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋體" };
        22 Random rand = new Random();
        23
        24 for (int i = 0; i < 50; i++)
        25 {
        26 int x1 = rand.Next(image.Width);
        27 int x2 = rand.Next(image.Width);
        28 int y1 = rand.Next(image.Height);
        29 int y2 = rand.Next(image.Height);
        30 g.DrawLine(new Pen(Color.LightGray,1), x1,y1,x2,y2);//根據(jù)坐標(biāo)畫線
        31 }
        32
        33 for (int i = 0; i < checkCode.Length; i++)
        34 {
        35 int cindex = rand.Next(7);
        36 int findex = rand.Next(5);
        37
        38 Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
        39 Brush b = new System.Drawing.SolidBrush(c[cindex]);
        40 int ii = 4;
        41 if ((i + 1) % 2 == 0)
        42 {
        43 ii = 2;
        44 }
        45 g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * (12 + stepw)), ii);
        46 }
        47
        48 g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
        49
        50 System.IO.MemoryStream ms = new System.IO.MemoryStream();
        51 return image;
        52 }
        5、總結(jié)

        根據(jù)你要的隨機(jī)數(shù)和背景就可以返回BitMap數(shù)組,然后把BitMap數(shù)組以圖片形式存到內(nèi)存流,就可以返回了。在這里只提供思路與制作方法并沒有提供全部代碼與封裝過程,若對代碼有疑問或者需要實(shí)例可以加QQ群128584255,大家討論學(xué)習(xí)一下。

          全民消滅星星
          (24)全民消滅星星
          西西全民消滅星星專區(qū)為大家?guī)砹?,全民消滅星星騰訊官網(wǎng)版下載全民消滅星星手機(jī)版下載全民消滅星星安卓鉆石破解版下載全民消滅星星蘋果金幣修改版下載,全民消滅星星電腦版和輔助修改器下載,,全民消滅星星破解修改說明,,更多的金幣,,更多的鉆石,,體力已達(dá)上限值,,全民消滅星星特色經(jīng)典游戲的華麗變身,與眾不同的冒險(xiǎn)模式消滅星星,拯救呆萌小動(dòng)物更加自由,更加爽快,更加有趣全新的魔法道具,更多的游戲玩法嶄新的元素等著你來...更多>>
          星星塔防
          (12)星星塔防
          騰訊星星塔防是一款全新的塔防游戲,值得一說的是騰訊移動(dòng)游戲平臺(tái)已經(jīng)上線了好幾款塔防類型的游戲了,但是這款星星塔防玩法上有所不同,星星塔防從名字中就不難看出這是一款結(jié)合消除塔防游戲的創(chuàng)新手游。西西星星塔防專區(qū)提供騰訊星星塔防游戲相關(guān)下載。,,星星塔防輔助有哪些星星塔防作為一款塔防玩法為主的游戲,金錢是玩家必不可少的東西,常見好用的星星塔防刷金幣刷鉆石輔助最好用的是燒餅修改器了,安卓平臺(tái)和平臺(tái)都支持。,,...更多>>
          • 星星塔防1.0 安卓版

            04-23 / 14.6M

            推薦理由:騰訊星星塔防是一款全新的塔防游戲,值得一說的是騰訊移動(dòng)游戲平臺(tái)已經(jīng)上線了好幾款塔防類型的游戲
          • 星星塔防電腦版

            04-23 / 14.6M

            推薦理由:騰訊版星星塔防正式上線了哦,對于這款熱門題材的塔防佳作西西可是期待很久了,現(xiàn)在終于可以玩到了
          • 燒餅內(nèi)購破解ios版1.0 官方版

            03-02 / 67KB

            推薦理由:最近燒餅針對ios用戶推出了幾款強(qiáng)大的輔助,出來最先的燒餅修改器出了ios版本后,燒餅內(nèi)購破解ios版全新輔助
          • 燒餅游戲修改器V3.1 最新版

            01-29 / 970KB

            推薦理由:《燒餅游戲修改器SBgametool》是迄今為止Android平臺(tái)上最簡單好用的游戲修改工具(沒有之一),精小,快速,綠
          • 內(nèi)購大師(freedom)v1.2.3 官方免費(fèi)

            08-30 / 1.3M

            推薦理由:不用在羨慕蘋果的免內(nèi)購神器了,Android上也終于出現(xiàn)了,名字叫freedom,還不趕快來試一試!官方介紹:內(nèi)購
          • glu金幣修改器3.0 中文版

            03-31 / 1.8M

            推薦理由:glu系列游戲?qū)俳饚判薷钠,適用于安卓android手機(jī)系統(tǒng)glu游戲是免費(fèi)的,可是內(nèi)購的高級(jí)道具卻收費(fèi)不菲!g

          相關(guān)評(píng)論

          閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

          • 8 喜歡喜歡
          • 3 頂
          • 1 難過難過
          • 5 囧
          • 3 圍觀圍觀
          • 2 無聊無聊

          熱門評(píng)論

          最新評(píng)論

          發(fā)表評(píng)論 查看所有評(píng)論(0)

          昵稱:
          表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
          字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)