[学习公共库]ASP.NET 中图像验证码的实现 |
麦林 发表于 2007/5/13 20:48:32 | 图像验证码在Web登录界面中很常见,以下是用C#写的一个简单例子。
1.首先创建一个 ValidateImage.aspx 页,注意引用System.Drawing和System.Drawing.Imaging两个命名空间。代码如下:
500)this.width=500'>
500)this.width=500'> public class ValidateImage : System.Web.UI.Page500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> private void Page_Load(object sender, System.EventArgs e)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> //生成验证码500)this.width=500'> string validateCode=CreateValidateCode();500)this.width=500'> //生成图像500)this.width=500'> Bitmap bitmap=new Bitmap(70, 25);500)this.width=500'> //设置图像背景色500)this.width=500'> SetBgColor(bitmap,Color.Brown);500)this.width=500'> // 绘制图像干扰500)this.width=500'> DrawDisturb(bitmap);500)this.width=500'> // 绘制验证码500)this.width=500'> DrawValidateCode(bitmap, validateCode);500)this.width=500'> // 保存验证码图像,等待输出500)this.width=500'> bitmap.Save(Response.OutputStream, ImageFormat.Gif);500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 生成 A-Z 的四位验证码500)this.width=500'> private string CreateValidateCode()500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> string validateCode=string.Empty;500)this.width=500'> Random random=new Random();500)this.width=500'>500)this.width=500'> for(int i=0; i<4; i++)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> //n=1~26500)this.width=500'> int n=random.Next(26);500)this.width=500'> validateCode+=(char)(n+65);500)this.width=500'> }500)this.width=500'>500)this.width=500'> // 保存验证码500)this.width=500'> Session["ValidateCode"]=validateCode;500)this.width=500'> return validateCode;500)this.width=500'> }500)this.width=500'> 500)this.width=500'> private void SetBgColor(Bitmap bitmap,Color color)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> for(int x=0; x<bitmap.Width; x++)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> for(int y=0; y<bitmap.Height; y++)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> bitmap.SetPixel(x, y, color);500)this.width=500'> }500)this.width=500'> }500)this.width=500'> }500)this.width=500'> private void DrawDisturb(Bitmap bitmap)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> Random random=new Random();500)this.width=500'>500)this.width=500'> for(int x=0; x<bitmap.Width; x++)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> for(int y=0; y<bitmap.Height; y++)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> // 50? 根据自己需要的干扰浓度进行设置500)this.width=500'> if(random.Next(100)<=50)500)this.width=500'> bitmap.SetPixel(x, y, Color.White);500)this.width=500'> }500)this.width=500'> }500)this.width=500'> }500)this.width=500'>500)this.width=500'> private void DrawValidateCode(Bitmap bitmap, string validateCode)500)this.width=500'>500)this.width=500'> 500)this.width=500'>{500)this.width=500'> // 获取绘制器对象500)this.width=500'> Graphics g=Graphics.FromImage(bitmap);500)this.width=500'>500)this.width=500'> // 设置绘制字体500)this.width=500'> Font font=new Font("Arial", 14, FontStyle.Bold | FontStyle.Italic);500)this.width=500'>500)this.width=500'> //绘制的起始位置500)this.width=500'> int posX=2;500)this.width=500'> int posY=2;500)this.width=500'>500)this.width=500'> // 绘制验证码图像500)this.width=500'> g.DrawString(validateCode, font, Brushes.Black, posX, posY);500)this.width=500'> }2.验证码的使用在需要验证码的网页中,直接使用就可以了。<img src="ValidateImage.aspx" style="border-color:#000000;border-width:1px;border-style:Solid">相应的Session可以从Session["ValidateCode"]中取得.
|
|
|

.: 公告
|
« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

blog名称:栗色?蓝色? 日志总数:449 评论数量:201 留言数量:37 访问次数:2260061 建立时间:2006年5月16日 |
|

.: 留言板
|

.: 链接
|

|