西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

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

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

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

作者:佚名點擊:359次評論:0次標(biāo)簽: 驗證碼 賬號密碼 服務(wù)器資源

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

 1、為什么要加驗證碼?

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

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

3、隨機數(shù) Code
①數(shù)字隨機數(shù)
1 /// <summary>
2 /// 數(shù)字隨機數(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 }

②字符串隨機數(shù)
1 /// <summary>
2 /// 字符串驗證碼
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));//為了得到不同的隨機序列
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 }


③中文隨機數(shù)
1 /// <summary>
2 /// 隨機中文碼
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個隨機中文漢字編碼
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)生隨機中文漢字編碼
23 /// </summary>
24 /// <param name="strlength"></param>
25 /// <returns></returns>
26 private static object[] CreateRegionCode(int strlength)
27 {
28 //定義一個字符串?dāng)?shù)組儲存漢字編碼的組成元素
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);//更換隨機種子
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 //定義兩個字節(jié)變量存儲產(chǎn)生的隨機漢字區(qū)位碼
75 byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
76 byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
77
78 //將兩個字節(jié)變量存儲在字節(jié)數(shù)組中
79 byte[] str_r = new byte[] { byte1, byte2 };
80
81 //將產(chǎn)生的一個漢字的字節(jié)數(shù)組放入object數(shù)組中
82 bytes.SetValue(str_r, i);
83 }
84 return bytes;
85 }
4、現(xiàn)在有了素材(隨機數(shù)),那么再加上圖片和困擾就完成了彩色圖片驗證碼--困擾背景+圖片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 };//定義隨機顏色
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ù)你要的隨機數(shù)和背景就可以返回BitMap數(shù)組,然后把BitMap數(shù)組以圖片形式存到內(nèi)存流,就可以返回了。在這里只提供思路與制作方法并沒有提供全部代碼與封裝過程,若對代碼有疑問或者需要實例可以加QQ群128584255,大家討論學(xué)習(xí)一下。

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

      04-23 / 14.6M

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

      04-23 / 14.6M

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

      03-02 / 67KB

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

      01-29 / 970KB

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

      08-30 / 1.3M

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

      03-31 / 1.8M

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

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

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

    熱門評論

    最新評論

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

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