首页 > C#代码片段 > C#验证码识别的基本思路及方法
2018
09-17

C#验证码识别的基本思路及方法

投票软件比较有技术含量的部分就在验证码识别。为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票。但是加了验证码是否就能万无一失呢,也不尽然。虽然不是所有验证码都能识别(如QQ的变形汉字验证码是不太可能用软件识别的,个人觉得),但还是有很多验证码可以用软件来识别的。

下面以天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法:

第一步、获取验证码图片
C#可以用HttpWebRequest类GET验证码的网址,得到返回的数据流,再将数据流值赋给Bitmap变量。在Winform里放一个PictureBox控件,将它的Image属性指定为Bitmap变量,就可以显示出验证码图片了。
也可以使用Bitmap的Save方法将图片保存成Bmp文件。

C#验证码识别的基本思路及方法 - 第1张  | 自学编程笔记

 

第二步、将验证码图片去色(将彩色转换为灰度)
去色是为了进一步做成黑白双色图片。

 

C#验证码识别的基本思路及方法 - 第2张  | 自学编程笔记

第三步、去杂色,转换为黑白图片
从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。

 

C#验证码识别的基本思路及方法 - 第3张  | 自学编程笔记
第四步、动态得到每个数字的边界

C#验证码识别的基本思路及方法 - 第4张  | 自学编程笔记

 

五、得到每个字符的特征码
在每个字符的边界内,检测每个象素,如果象素为白色则为“0”,如果象素为黑色则为“1”,将“0”“1”连起来就是该数字或字符的特征码。

 

六、完成验证码图片的识别
将获取的特征码和对应的数字或字符保存起来,下次再将新获取的特征码跟保存的特征码对比,如果相同则提取对应的数字或字符,完成验证码的识别。

C#验证码识别的基本思路及方法 - 第5张  | 自学编程笔记

最后编辑:
作者:炳烛
编程笔记

留下一个回复

你的email不会被公开。