本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[学习公共库]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"]中取得.

阅读全文(1818) | 回复(0) | 编辑 | 精华

 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
 

The Neurotic Fishbowl

.: 公告

fighting for the work!


Bloginess

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

.: 我的分类(专题)

首页(449)
文字感悟(103)
学习公共库(61)
生活体会(100)
资源收集(14)
.NET-Winform(27)
音乐文字(15)
心情小记(119)
SQL问题解决(10)


In the Bowl

.: 最新日志

C#打印代码
你看到的我是蓝色的
即将逝去的3月
这个假期
两个月过去
表名存在其他表时获取数据
条码打印
Remoting的用法
INI文件用法


.: 最新回复

回复:条码打印
回复:条码打印
回复:即将逝去的3月
回复:cookie对象使用
回复:条码打印
回复:JSP学习(字符串比较)
回复:应收应付核销规则及常见问题(续)
回复:两个月过去
回复:两个月过去


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



Text Me

.: 留言板

签写新留言

链接完成
回:loseVC
来喽~
转转......
新年啦
对自己说
祝福
回:佑手
WO


Other Fish in the Sea

.: 链接


loseVC's BLOG
Collapsar_feel
布衣加针
C#and.Net
Kinogam Web




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144784215 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号