验证码识别实践2:自己动手C#实现,对CSDN资源上传验证码识别率100%,久游网登陆90%

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee/


我的验证码识别实践一共有3篇文章。

上一篇(验证码识别实践1):http://blog.csdn.net/stevenkylelee/article/details/8263890

下一篇(验证码识别实践3):http://blog.csdn.net/stevenkylelee/article/details/8308772


昨天写了《验证码识别实践1》一文,

由于昨晚上又改进了下算法和程序,

所以今天继续写。

改进的程序下载地址:

http://download.csdn.net/detail/stevenkylelee/4859013


其实,识别的大体过程上一篇文章基本上讲完了。

如果要说的话,只能在细节上深入。

现在我也不太确定,我用的方法是否具备一定的扩展性和适应性。


所以,先拿2个网站进行试验。

以后这些地址的验证码可能会变,我先截图好现在的图

1.CSDN上传资源页面的验证码。地址:

http://u.download.csdn.net/upload

截图:    

2.久游登陆页面的验证码。地址:

https://passport.9you.com/login.php 或 https://login.passport.9you.com/ 

截图:

     

     

     

    



先看看CSDN上传资源页面的。

比较简单,改了一下处理过程,就轻松100%识别了。


一般每种验证码都有其特点。

所以,对应一种类型的验证码往往需要一种特定的算法。

尽管CSDN资源的比较简单,但针对它做的识别,

就只能用在它身上,不可套用到其他情况上。

当然,这个也可能和我水平有限有关。

会不会有牛人可以写出一个算法就能通用到所有的验证码的情况,

我就不清楚了。总之,我不能。呵呵


先在界面上填写CSDN资源上传的验证码的地址:

http://u.download.csdn.net/index.php/rest/tools/validcode/uploadvalidcode/10.501964908791706

然后在程序界面上的“验证码类型”选择:“CSDN资源上传”

再然后,点“下载”,再点“识别”,就会出结果了。

截图如下:



然后是久游登陆页面的验证码,这个验证码就比较复杂一些了

62种分类=26个小写字母+26个大写字母+10个数字。

随机背景颜色,随机字符颜色,随机字符位置,

随机字符大小,随机字符扭曲。

虽然随机的情况比较多,但随机的程度都不是很大。

所以,识别还是可以的,但目前不能做到100%。


先填写久游的验证码地址:

https://login.passport.9you.com/identifyingCode.jsp?0.953521374380216

然后,选择“验证码类型”为“提取连通分量”

再点“下载”,“识别”

识别截图如下:



用提取连通分量的方法,一般可以“抓到”字符。

就是说,在字符轮廓分明并且没有断裂的情况下,

不管它出现在什么位置,都可以定位到。

这样就屏蔽了位置随机性。


对久游登陆的识别率大概是80%-90%左右。

那个10%的missing率是怎么回事呢?

原因出在字符的分割上。

久游登陆的验证码会有一定的几率,出现字符粘连。

就是说,提取到的一个连通分量会包含2个或以上字符。

对于这种情况,我的处理是,如果提取到了一个比较宽的连通分量。

那么,按照字符平均宽度进行切分,把那个宽的连通分量,

垂直切成符合字符可能宽度的尺寸的几份,在进行识别。

这个处理,有一定的效果。比如:W和M边缘相连的话,可以切分出来。

但是,对于:M和有点旋转的i或者l相连,就切分错误了。


其实,要做到久游这种验证码的100%识别。

大概也是可以的。就是要花费比较多的精力。

就好比:考试得40分,要考到60分不难。

而考到了95分,要再考到98分或者100分就难了。

昨天和前任公司的技术部主管聊到这个问题,

他认为没有必要做到100%识别,一般有90%以上就足够了。

也有人和我说,有些情况,30%也够了。

因为,大不了就是重发3次请求,作为自动登陆来说,没什么。


最后,久游验证码怎样做到100%识别呢?

呵呵。透露一点,久游有一个比较明显的破绽,

利用好这个破绽,应该可以弥补我的10%-20%错误,

最终达到100%识别。

这个破绽就是:字符的颜色!

  • 20
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 65
    评论
### 回答1: "c"是英文字母表中的第三个字母。它的发音是/k/,在拼音中对应的是字母"c"。这个字母在英语中有很多常见的用法和含义。首先,它可以用作名词,代表一种音乐音符中的do音。例如,在音乐理论中,我们常常使用"c"来表示中央的音符。其次,"c"还可以表示温度的单位,摄氏度。例如,我们常常用摄氏度来表示温度的计量。此外,"c"也可以代表一种编程语言,C语言。C语言是一种高级的、面向过程的编程语言,广泛用于系统的开发和嵌入式设备的编程。此外,"c"还可以是一种常见的缩写,如"c/o"表示通过,"cc"表示抄送等。总的来说,"c"是一个非常常见的字母,在英语以及其他领域中都有多种用法和含义。 ### 回答2: C是计算机科学中的一门程序设计语言。它是由美国贝尔实验室的Dennis Ritchie于20世纪70年代初开发的。C是一种高级编程语言,它兼具了高级语言和低级语言的特性。 C语言的设计目标是提供一种能够方便地编写系统软件的语言。它具有简洁而规范的语法,使得编写代码更加高效且易于理解。C语言基于过程式编程范式,强调程序的步骤和逻辑,使得程序的结构更加清晰。 C语言的特点包括强大的表达能力、高效的执行速度、直接接近底层硬件、可移植性以及广泛应用的领域。C语言的语法简单,仅包含少量的关键字和语法规则,使得初学者能够较快地上手并编写出可运行的程序。 C语言广泛用于系统和应用软件的开发,如操作系统、编译器、数据库、网络协议等。它也是其他编程语言的基础,许多现代编程语言的语法、结构和特性都借鉴了C语言。 C语言的学习对于计算机科学专业的学生来说非常重要,因为它能够培养良好的编程思维和解决问题的能力。通过学习C语言,学生将了解到程序的基本结构和算法设计,从而为后续的学习和开发打下坚实的基础。 总而言之,C语言是一门重要的编程语言,具有简洁高效、广泛应用的特点。它不仅可用于开发系统软件,还是培养编程思维和解决问题能力的良好工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值