zhway

芭蕉夜雨

[全源码提供]图片验证码控件套件[原创]

图片验证码控件套件

包括一个只产生一张验证码图片的控件(ValidateCodeImage)和一个集成了验证功能的控件(ValidateCodeControl),可以只使用ValidateCodeImage。但是,使用ValidateCodeControl必须有一个页面使用了ValidateCodeImage控件给ValidateCodeControl调用。原因很简单,相信大家都知道我就不多罗嗦了。

必须说明的是,两个控件都提供了ValidateCodeSessionName属性,这两个属性的名称必须统一。否则会出现永远都验证不通过或者“未将引用设置到对象的实例”的错误。

功能:
1.设定验证码字符的取值范围
2.设定验证码的长度
3.设定验证码的长度是随机的还是固定的
4.设定验证码的字符颜色是固定的(Static)还是随机的(Random)
5.可以设定验证码的每一个字符具有不同的颜色(RandomAll)
6.可以设定验证码的背景颜色
7.可以设定验证码的边框颜色以及边框的宽度
8.验证码的边框颜色可以是随机的
9.可以设定干扰线的级别(系统定义)或者自定义干扰线的数量
10.可以设定干扰线的长度。
11.随机的验证码字体
........

因为没有办法在页面的指定区域绘图,所以另外提供了一个集成了验证码输入控件和刷新验证码的链接的控件,该控件提供了一个 bool IsMatch() 方法以及该方法的一个重载 bool IsMatch(bool bIngoreCase)。在提交操作的时候只要调用该方法或者其重载即可实现验证。

另外大家讨论有没有办法在页面或者控件的指定位置或者指定的控件上画图?

附件:图片验证码控件和Demo

posted on 2006-11-10 15:36 阿伟 阅读(3206) 评论(21)  编辑 收藏 网摘 所属分类: Web服务器控件开发

Feedback

#1楼 2006-11-10 16:00 Clingingboy      

喜欢,不过我感觉高度和字不搭配,*2太高了,而且我感觉高和宽不该用int类型,

获取高度*1.5会更好看.不过还是挺喜欢的
  回复  引用  查看    

#2楼[楼主] 2006-11-10 16:01 阿伟      

@Clingingboy
当时主要目的是为了能够显示的了文字别的没有多考虑
  回复  引用  查看    

#3楼 2006-11-10 16:06 Clingingboy      

还有建议加入一个RequiredFieldValidator控件,不然每次点下按钮就要刷一次,刷一次号码又变了.建议而已^_^

还有文本框没有暴露text属性
  回复  引用  查看    

#4楼 2006-11-10 16:13 Clingingboy      

我看到楼主的随笔大多是做控件的多,以后多关注你的blog,我也很喜欢这种技术,而且很实用   回复  引用  查看    

#5楼[楼主] 2006-11-10 16:13 阿伟      

@Clingingboy
Text的属性有的,不过名称是ValidateCodeUserInput。
至于刷新一次号码有变了我觉得是应该要变得,不知道大家觉得是不是需要变。
  回复  引用  查看    

#6楼 2006-11-10 16:15 anikin      

@阿伟
当然需要变,不然验证码也就失去效果了
  回复  引用  查看    

#7楼[楼主] 2006-11-10 16:17 阿伟      

@Clingingboy
我看到楼主的随笔大多是做控件的多,以后多关注你的blog,我也很喜欢这种技术,而且很实用


呵呵,这些都是些简单的控件,复杂的控件工作量还是比较大的。正在写树形控件、分页控件文本编辑器等东东呢,不过还没有弄好。那些东西的工作量大的“惊人”阿。

多多交流!
  回复  引用  查看    

#8楼 2006-11-10 16:17 Clingingboy      

我的意思是先客户端验证,减少刷新次数   回复  引用  查看    

#9楼 2006-11-10 19:16 壮志      

好!   回复  引用  查看    

#10楼 2006-11-10 21:50 superstar      

那个能运行的,我运行时出错,提示MainTree生成树出错,...未能找到MainTree   回复  引用  查看    

#11楼 2006-11-11 08:35 伟哥[未注册用户]

@superstar

MainTree?
怎么会跑出来这个东东?
  回复  引用    

#12楼 2006-11-30 07:15 CnBlogFans[未注册用户]

LZ分享的精神不错

我试用了一下,在本地调试没有问题

但是放到互联网上访问,经常出现验证码图片出现X的图片,特别是点“换一个验证码”,基本上是X图片

不知道LZ有没有出现这个问题

谢谢解答
  回复  引用    

#13楼 2006-11-30 16:05 阿伟[匿名][未注册用户]

@CnBlogFans
放在互联网上使用和本地调试是没有太大的区别的

看看是不是路径没有设置好,或者是服务器超时
  回复  引用    

#14楼 2007-09-07 13:14 audi[未注册用户]

谢谢楼主的精心设计,但有个问题,如果用了MasterPage,返回的始终ValidateCodeControl.IsMatch(),返回的始终是false.   回复  引用    

#15楼 2007-09-11 09:43 远航      

这个代码写的问题大多了吧.ValidateCodeFontColorMode="randomall"你把这个改成其它的试试. private string GetValidateCode()这个函数有问题的,好好看看,还有,刷新客户端事件可以放到img控件上.再加一个客户端验证.还有这么小的控件不要用table布局吧.   回复  引用  查看    

#16楼 2008-02-02 16:53 aaaaaaaaaaaa[未注册用户]

aaaaa   回复  引用    

#17楼 2008-03-28 10:55 saf[未注册用户]

fsdafasf   回复  引用    

#18楼 2008-05-05 16:23 alby[未注册用户]

动易.net怎么和你的一模一样?   回复  引用    

#19楼[楼主] 2008-06-25 15:17 阿伟      

@alby
如果不是巧合,我可以保证动易是那我的直接使用的。
  回复  引用  查看    

#20楼[楼主] 2008-06-25 15:19 阿伟      

@远航
每个人习惯不一样,我觉得用Table布局更方便,源码开放了,你完全可以根据自己的喜好做开发。另外这里提供了一个思路和一个不是很完美的产品。所以,您还是别太挑剔了。
  回复  引用  查看    

#21楼 2008-10-22 23:56 Fox.Lee[未注册用户]

首先感谢楼主分享。
我在使用中发现一个问题,ValidateCodeImage.GetValidateCodeWidth方法中调用了GetValidateCode来确定有多少字符,然后再根据字符数决定宽度。
/// <summary>
/// 获取验证码的图片宽度
/// </summary>
/// <returns></returns>
private int GetValidateCodeWidth()
{
return (int)((GetValidateCode().Length * ValidateCodeFontSize) * ValiateCodeWidthModulus);
}

然而GetValidateCode方法会产生一个ValidateCode并写到Session去。
在PainCode方法中绘制RandomAll模式时,又调用了GetCodeRect。
GetCodeRect中再次调用GetValidateCodeWidth。于是再次产生ValidateCode,如是反复。

不知是我下载的代码有问题还是怎样?
望楼主不吝赐教,最好能Mail Me :)
  回复  引用    





发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 556658




相关文章:

相关链接:

My Links

Blog Stats

与我联系

搜索

 

常用链接

留言簿

随笔分类(7)

随笔档案(14)

博友

最新随笔

积分与排名

最新评论

阅读排行榜