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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# C/S 图片验证码功能源码

發布時間:2024/1/17 C# 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# C/S 图片验证码功能源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

運行效果如圖

用法如下:

???????? /// ? <summary>
????????
/// ?顯示驗證碼
????????
/// ? </summary>
????????
/// ? <returns> 驗證碼 </returns>
???????? private ? void ?GetVerifyCode()
????????{
????????????VerifyCodeImage?verifyCodeImage?
= ? new ?VerifyCodeImage();
????????????
// ?取隨機碼
???????????? string ?code? = ?verifyCodeImage.CreateVerifyCode().ToUpper();
????????????
// ?輸出圖片
???????????? this .picVerifyCode.Image? = ?verifyCodeImage.CreateImage(code,? 3 );
????????????
this .picVerifyCode.Tag? = ?code;
????????}

?

???????? private ? void ?picVerifyCode_DoubleClick( object ?sender,?EventArgs?e)
????????{
????????????
this .GetVerifyCode();
????????????
// ?this.txtVerifyCode.Clear();
???????????? this .txtVerifyCode.SelectAll();
????????????
this .txtVerifyCode.Focus();
????????}

?

源碼如下:

// -----------------------------------------------------------------
// ?All?Rights?Reserved?,?Copyright?(C)?2011?,?Hairihan?TECH,?Ltd.?
// -----------------------------------------------------------------

using ?System;
using ?System.Drawing;
using ?System.Web;

namespace ?DotNet.Utilities
{
????
public ? class ?VerifyCodeImage
????{
????????
public ?VerifyCodeImage()
????????{
????????}

????????
#region ?驗證碼長度(默認4個驗證碼的長度)
????????
int ?length? = ? 4 ;
????????
public ? int ?Length
????????{
????????????
get ?{? return ?length;?}
????????????
set ?{?length? = ?value;?}
????????}
????????
#endregion

????????
#region ?驗證碼字體大小(為了顯示扭曲效果,默認40像素,可以自行修改)
????????
int ?fontSize? = ? 50 ;
????????
public ? int ?FontSize
????????{
????????????
get ?{? return ?fontSize;?}
????????????
set ?{?fontSize? = ?value;?}
????????}
????????
#endregion

????????
#region ?邊框補(默認1像素)
????????
int ?padding? = ? 2 ;
????????
public ? int ?Padding
????????{
????????????
get ?{? return ?padding;?}
????????????
set ?{?padding? = ?value;?}
????????}
????????
#endregion

????????
#region ?是否輸出燥點(默認不輸出)
????????
bool ?chaos? = ? true ;
????????
public ? bool ?Chaos
????????{
????????????
get ?{? return ?chaos;?}
????????????
set ?{?chaos? = ?value;?}
????????}
????????
#endregion

????????
#region ?輸出燥點的顏色(默認灰色)
????????Color?chaosColor?
= ?Color.LightGray;
????????
public ?Color?ChaosColor
????????{
????????????
get ?{? return ?chaosColor;?}
????????????
set ?{?chaosColor? = ?value;?}
????????}
????????
#endregion

????????
#region ?自定義背景色(默認白色)
????????Color?backgroundColor?
= ?Color.White;
????????
public ?Color?BackgroundColor
????????{
????????????
get ?{? return ?backgroundColor;?}
????????????
set ?{?backgroundColor? = ?value;?}
????????}
????????
#endregion

????????
#region ?自定義隨機顏色數組
????????Color[]?colors?
= ?{?Color.Black,?Color.Red,?Color.DarkBlue,?Color.Green,?Color.Orange,?Color.Brown,?Color.DarkCyan,?Color.Purple?};
????????
public ?Color[]?Colors
????????{
????????????
get ?{? return ?colors;?}
????????????
set ?{?colors? = ?value;?}
????????}
????????
#endregion

????????
#region ?自定義字體數組
????????
string []?fonts? = ?{? " Arial " ,? " Georgia " ?};
????????
public ? string []?Fonts
????????{
????????????
get ?{? return ?fonts;?}
????????????
set ?{?fonts? = ?value;?}
????????}
????????
#endregion

????????
#region ?自定義隨機碼字符串序列(使用逗號分隔)
????????
// ??去除?0,1,i,l,o,I,L,O
???????? string ?codeSerial? = ? " 2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,V,W,X,Y,Z " ;
????????
public ? string ?CodeSerial
????????{
????????????
get ?{? return ?codeSerial;?}
????????????
set ?{?codeSerial? = ?value;?}
????????}
????????
#endregion

????????
#region ?產生波形濾鏡效果
????????
// private?const?double?PI?=?3.1415926535897932384626433832795;
???????? private ? const ? double ?PI2? = ? 6.283185307179586476925286766559 ;
????????
/// ? <summary>
????????
/// ?正弦曲線Wave扭曲圖片(Edit?By?51aspx.com)
????????
/// ? </summary>
????????
/// ? <param?name="srcBmp"> 圖片路徑 </param>
????????
/// ? <param?name="bXDir"> 如果扭曲則選擇為True </param>
????????
/// ? <param?name="nMultValue"> 波形的幅度倍數,越大扭曲的程度越高,一般為3 </param>
????????
/// ? <param?name="dPhase"> 波形的起始相位,取值區間[0-2*PI) </param>
????????
/// ? <returns></returns>
???????? public ?System.Drawing.Bitmap?TwistImage(Bitmap?srcBmp,? bool ?bXDir,? double ?dMultValue,? double ?dPhase)
????????{
????????????System.Drawing.Bitmap?bitmap?
= ? new ?Bitmap(srcBmp.Width,?srcBmp.Height);

????????????
// ?將位圖背景填充為白色
????????????System.Drawing.Graphics?graphics? = ?System.Drawing.Graphics.FromImage(bitmap);
????????????graphics.FillRectangle(
new ?SolidBrush(System.Drawing.Color.White),? 0 ,? 0 ,?bitmap.Width,?bitmap.Height);
????????????graphics.Dispose();

????????????
double ?dBaseAxisLen? = ?bXDir? ? ?( double )bitmap.Height?:?( double )bitmap.Width;

????????????
for ?( int ?i? = ? 0 ;?i? < ?bitmap.Width;?i ++ )
????????????{
????????????????
for ?( int ?j? = ? 0 ;?j? < ?bitmap.Height;?j ++ )
????????????????{
????????????????????
double ?dx? = ? 0 ;
????????????????????dx?
= ?bXDir? ? ?(PI2? * ?( double )j)? / ?dBaseAxisLen?:?(PI2? * ?( double )i)? / ?dBaseAxisLen;
????????????????????dx?
+= ?dPhase;
????????????????????
double ?dy? = ?Math.Sin(dx);

????????????????????
// ?取得當前點的顏色
???????????????????? int ?nOldX? = ? 0 ,?nOldY? = ? 0 ;
????????????????????nOldX?
= ?bXDir? ? ?i? + ?( int )(dy? * ?dMultValue)?:?i;
????????????????????nOldY?
= ?bXDir? ? ?j?:?j? + ?( int )(dy? * ?dMultValue);

????????????????????System.Drawing.Color?color?
= ?srcBmp.GetPixel(i,?j);
????????????????????
if ?(nOldX? >= ? 0 ? && ?nOldX? < ?bitmap.Width
?????????????????????
&& ?nOldY? >= ? 0 ? && ?nOldY? < ?bitmap.Height)
????????????????????{
????????????????????????bitmap.SetPixel(nOldX,?nOldY,?color);
????????????????????}
????????????????}
????????????}
????????????
return ?bitmap;
????????}
????????
#endregion

????????
#region ?生成校驗碼圖片
????????
public ?Bitmap?CreateImage( string ?code,? double ?multValue)
????????{
????????????
int ?fSize? = ?FontSize;
????????????
int ?fWidth? = ?fSize? + ?Padding;

????????????
int ?imageWidth? = ?( int )(code.Length? * ?fWidth)? + ? 4 ? + ?Padding? * ? 2 ;
????????????
int ?imageHeight? = ?fSize? * ? 2 ? + ?Padding;

????????????System.Drawing.Bitmap?bitmap?
= ? new ?System.Drawing.Bitmap(imageWidth,?imageHeight);

????????????Graphics?graphics?
= ?Graphics.FromImage(bitmap);

????????????graphics.Clear(BackgroundColor);

????????????Random?rand?
= ? new ?Random();

????????????
// ?給背景添加隨機生成的燥點
???????????? if ?( this .Chaos)
????????????{

????????????????Pen?pen?
= ? new ?Pen(ChaosColor,? 0 );
????????????????
int ?c? = ?Length? * ? 10 ;

????????????????
for ?( int ?i? = ? 0 ;?i? < ?c;?i ++ )
????????????????{
????????????????????
int ?x? = ?rand.Next(bitmap.Width);
????????????????????
int ?y? = ?rand.Next(bitmap.Height);

????????????????????graphics.DrawRectangle(pen,?x,?y,?
1 ,? 1 );
????????????????}
????????????}

????????????
int ?left? = ? 0 ,?top? = ? 0 ,?top1? = ? 1 ,?top2? = ? 1 ;

????????????
int ?n1? = ?(imageHeight? - ?FontSize? - ?Padding? * ? 2 );
????????????
int ?n2? = ?n1? / ? 4 ;
????????????top1?
= ?n2;
????????????top2?
= ?n2? * ? 2 ;

????????????Font?font;
????????????Brush?brush;

????????????
int ?cindex,?findex;

????????????
// ?隨機字體和顏色的驗證碼字符
???????????? for ?( int ?i? = ? 0 ;?i? < ?code.Length;?i ++ )
????????????{
????????????????cindex?
= ?rand.Next(Colors.Length? - ? 1 );
????????????????findex?
= ?rand.Next(Fonts.Length? - ? 1 );

????????????????font?
= ? new ?System.Drawing.Font(Fonts[findex],?fSize,?System.Drawing.FontStyle.Bold);
????????????????brush?
= ? new ?System.Drawing.SolidBrush(Colors[cindex]);

????????????????
if ?(i? % ? 2 ? == ? 1 )
????????????????{
????????????????????top?
= ?top2;
????????????????}
????????????????
else
????????????????{
????????????????????top?
= ?top1;
????????????????}

????????????????left?
= ?i? * ?fWidth;

????????????????graphics.DrawString(code.Substring(i,?
1 ),?font,?brush,?left,?top);
????????????}

????????????
// ?畫一個邊框?邊框顏色為Color.Gainsboro
????????????graphics.DrawRectangle( new ?Pen(Color.Gainsboro,? 0 ),? 0 ,? 0 ,?bitmap.Width? - ? 1 ,?bitmap.Height? - ? 1 );
????????????graphics.Dispose();

????????????
// ?產生波形
????????????bitmap? = ?TwistImage(bitmap,? true ,?multValue,? 4 );

????????????
return ?bitmap;
????????}
????????
#endregion

????????
#region ?生成隨機字符碼
????????
public ? string ?CreateVerifyCode( int ?codeLength)
????????{
????????????
if ?(codeLength? == ? 0 )
????????????{
????????????????codeLength?
= ?Length;
????????????}
????????????
string []?arr? = ?CodeSerial.Split( ' , ' );
????????????
string ?code? = ? "" ;
????????????
int ?randValue? = ? - 1 ;
????????????Random?random?
= ? new ?Random( unchecked (( int )DateTime.Now.Ticks));
????????????
for ?( int ?i? = ? 0 ;?i? < ?codeLength;?i ++ )
????????????{
????????????????randValue?
= ?random.Next( 0 ,?arr.Length? - ? 1 );
????????????????code?
+= ?arr[randValue];
????????????}
????????????
return ?code;
????????}

????????
public ? string ?CreateVerifyCode()
????????{
????????????
return ?CreateVerifyCode( 0 );
????????}
????????
#endregion


????????
#region ?將創建好的圖片輸出到頁面
????????
/// ? <summary>
????????
/// ?將創建好的圖片輸出到頁面
????????
/// ? </summary>
????????
/// ? <param?name="code"> 驗證碼 </param>
????????
/// ? <param?name="multValue"> 扭曲度(越大越扭曲) </param>
????????
/// ? <param?name="httpContext"> 上下文 </param>
???????? public ? void ?CreateImageOnPage( string ?code,? double ?multValue,?HttpContext?httpContext)
????????{
????????????System.IO.MemoryStream?memoryStream?
= ? new ?System.IO.MemoryStream();
????????????Bitmap?bitmap?
= ? this .CreateImage(code,?multValue);
????????????bitmap.Save(memoryStream,?System.Drawing.Imaging.ImageFormat.Jpeg);
????????????httpContext.Response.ClearContent();
????????????httpContext.Response.ContentType?
= ? " image/Jpeg " ;
????????????httpContext.Response.BinaryWrite(memoryStream.GetBuffer());

????????????memoryStream.Close();
????????????memoryStream?
= ? null ;
????????????bitmap.Dispose();
????????????bitmap?
= ? null ;
????????}
????????
#endregion
????}
}

?

?

轉載于:https://my.oschina.net/iwenr/blog/227597

總結

以上是生活随笔為你收集整理的C# C/S 图片验证码功能源码的全部內容,希望文章能夠幫你解決所遇到的問題。

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