日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

验证码类(转)

發布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 验证码类(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

這些東西網上都泛濫了,隨便拉了個過來,然后改改,加上自己的標示什么的,就是這樣子了。
可以定義驗證碼的格式,包括字母、數字、特殊符號和漢字,指定生成的圖片大小。
本來還想加上圖片扭曲的,可怕以后用起來被人說“萬惡的驗證碼”所以就算了。

? 1using?System;
??2using?System.Collections;
??3using?System.Collections.Generic;
??4using?System.Drawing;
??5using?System.Text;
??6using?System.Threading;
??7using?System.Drawing.Drawing2D;
??8
??9namespace?SHNK.Framework.Utility
?10{
?11????/**////?<summary>
?12????///?驗證碼生成類
?13????///?</summary>

?14????public?static?class?ValidateCodeHelper
?15????{
?16????????/**////?<summary>
?17????????///?生成長度為length、字符類型為codeType的驗證碼字符串
?18????????///?</summary>
?19????????///?<param?name="codeType">驗證碼類型</param>
?20????????///?<param?name="length">驗證碼長度</param>
?21????????///?<returns>驗證碼字符串</returns>

?22????????public?static?string?GenerateCode(ValidateCodeType?codeType,?int?length)
?23????????{
?24
?25????????????const?string?sNumber?=?"0123456789";
?26????????????const?string?sLetter?=?"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
?27????????????const?string?sSymbol?=?"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
?28
?29????????????if?((codeType?|?ValidateCodeType.Chinese)?==?codeType)
?30????????????{
?31????????????????return?GetChinese(length);
?32????????????}

?33
?34????????????StringBuilder?blocks?=?new?StringBuilder();
?35????????????StringBuilder?builder?=?new?StringBuilder();
?36
?37????????????if?((codeType?|?ValidateCodeType.Number)?==?codeType)
?38????????????????blocks.Append(sNumber);
?39
?40????????????if?((codeType?|?ValidateCodeType.Letter)?==?codeType)
?41????????????????blocks.Append(sLetter);
?42
?43????????????if?((codeType?|?ValidateCodeType.Symbol)?==?codeType)
?44????????????????blocks.Append(sSymbol);
?45
?46????????????Random?rand?=?new?Random();
?47????????????for?(int?i?=?0;?i?<?length;?i++)
?48????????????{
?49????????????????builder.Append(blocks[rand.Next(blocks.Length)]);
?50????????????}

?51
?52????????????return?builder.ToString();
?53????????}

?54
?55????????/**////?<summary>
?56????????///?獲取num個中文字符
?57????????///?</summary>
?58????????///?<param?name="num">字符串長度</param>
?59????????///?<returns>中文字符</returns>

?60????????private?static?string?GetChinese(int?num)
?61????????{
?62????????????/**//*?*********************************************
?63?????????????*?be?in?common?use
?64?????????????*?
?65?????????????*?first?byte???????0xB0?-?0xD7
?66?????????????*?second?byte??????0xA1?-?0xFE
?67?????????????*?
?68?????????????*??????????except??0xD7FA?-?0xD7FE?(space)
?69?????????????*?*********************************************/

?70????????????const?int?_MAX_SIZE?=?3755;?//??(0xD7?-?0xB0?+?1)?*?(0xFE?-?0xA1?+?1)?-?(0xD7FE?-?0xD7FA?+?1);
?71????????????const?int?_Capacity?=?94;???//??0xFE?-?0xA1?+?1
?72
?73????????????Random?rand?=?new?Random();
?74????????????StringBuilder?builder?=?new?StringBuilder();
?75????????????for?(int?i?=?0;?i?<?num;?i++)
?76????????????{
?77????????????????int?index?=?rand.Next(_MAX_SIZE);
?78????????????????int?high?=?Math.Floor(index.ToDouble()?/?_Capacity.ToDouble()).ToInt32();
?79????????????????int?lower?=?index?%?_Capacity;
?80????????????????string?code?=?Encoding.Default.GetString(new?byte[]?{?(byte)(high?+?0xB0),?(byte)(lower?+?0xA1)?});
?81????????????????builder.Append(code);
?82????????????}

?83????????????return?builder.ToString();
?84????????}

?85
?86????????/**////?<summary>
?87????????///?按照輸入的字符串src和每個字符位圖的寬度生成一張圖片
?88????????///?</summary>
?89????????///?<param?name="src">驗證碼</param>
?90????????///?<param?name="height">圖片高度</param>
?91????????///?<param?name="wdpc">每個字符所占寬度</param>
?92????????///?<returns>驗證圖片</returns>

?93????????public?static?Image?GenerateImage(string?src,?int?height,?int?wdpc)
?94????????{
?95????????????Bitmap?img?=?new?Bitmap(src.Length?*?wdpc,?height);
?96????????????Graphics?g?=?Graphics.FromImage(img);
?97????????????g.Clear(Color.White);
?98
?99????????????Random?rand?=?new?Random();
100????????????for?(int?i?=?0;?i?<?25;?i++)
101????????????{
102????????????????int?x1?=?rand.Next(img.Width);
103????????????????int?x2?=?rand.Next(img.Width);
104????????????????int?y1?=?rand.Next(img.Height);
105????????????????int?y2?=?rand.Next(img.Height);
106
107????????????????g.DrawLine(new?Pen(Color.Silver),?x1,?y1,?x2,?y2);
108????????????}

109????????????Font?f?=?new?Font("'Segoe?UI'?微軟雅黑?Verdana?宋體",?14f);
110????????????Brush?b?=?new?LinearGradientBrush(new?Rectangle(new?Point(0,?0),?img.Size),?Color.Blue,?Color.DarkRed,?LinearGradientMode.ForwardDiagonal);
111????????????for?(int?i?=?0;?i?<?src.Length;?i++)
112????????????????g.DrawString(src[i].ToString(),?f,?b,?wdpc?*?i.ToSingle(),?0f);
113
114????????????g.Save();
115????????????for?(int?i?=?0;?i?<?100;?i++)
116????????????{
117????????????????int?x?=?rand.Next(img.Width);
118????????????????int?y?=?rand.Next(img.Height);
119
120????????????????img.SetPixel(x,?y,?Color.FromArgb(rand.Next()));
121????????????}

122
123????????????return?img;
124????????}

125????}

126
127????ValidateCodeType?Enum#region?ValidateCodeType?Enum
128????/**////?<summary>
129????///?驗證碼類型枚舉
130????///?</summary>

131????public?enum?ValidateCodeType
132????{
133????????/**//*??ValidateCodeType枚舉成員?????????????????????????????????????
134?????????*??
135?????????*??????Number:
136?????????*????????ASCII?Code?48?-?57
137?????????*????????
138?????????*??????Letter:
139?????????*????????Uppercase
140?????????*??????????ASCII?Code?65?-?90
141?????????*????????Lowercase
142?????????*??????????ASCII?Code?97?-?122
143?????????*??????
144?????????*??????Symbol:
145?????????*??????????ASCII?Code?33?-?126?except?Number?and?Letter
146?????????*??????????
147?????????*??????Chinese:
148?????????*??????????Unicode?0xA1A1-0xF7FE
149?????????*/

150????????/**////?<summary>
151????????///?數字
152????????///?</summary>

153????????Number?=?1,
154????????/**////?<summary>
155????????///?字母
156????????///?</summary>

157????????Letter?=?2,
158????????/**////?<summary>
159????????///?符號
160????????///?</summary>

161????????Symbol?=?4,
162????????/**////?<summary>
163????????///?漢字
164????????///?</summary>

165????????Chinese?=?8
166????}

167????#endregion

168
169????public?static?partial?class?Extension
170????{
171????????convert?method#region?convert?method
172????????public?static?double?ToDouble(this?IConvertible?o)
173????????{
174????????????return?Convert.ToDouble(o);
175????????}

176
177????????public?static?int?ToInt32(this?IConvertible?o)
178????????{
179????????????return?Convert.ToInt32(o);
180????????}

181
182????????public?static?float?ToSingle(this?IConvertible?o)
183????????{
184????????????return?Convert.ToSingle(o);
185????????}

186????????#endregion

187????}

188}

轉載于:https://www.cnblogs.com/HappyQQ/archive/2008/04/16/1155945.html

總結

以上是生活随笔為你收集整理的验证码类(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。