C#联通新版验证码识别的实现
以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下

现在将识别步骤说下
1,转换灰度图片
2,清除2px的边框
3,分割验证码个数 (4)
4,生成字模库
经过以上步骤,可以得到下面这个效果

下面为部分实现代码
| 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | publicString GetCheckString(Bitmap bitmap) {           UnCodebase ud = newUnCodebase(bitmap);           ud.GrayByPixels();           ud.ClearPicBorder(2);           ud.CutMap(14, 15, 0, 0);           bitmap = ud.bmpobj;         //  bitmap = ud.ClearNoise(128, 1);           String chkcode = "";           Bitmap[] arrmap = ud.SplitImg(bitmap, 4, 1);           foreach(Bitmap item inarrmap) {               String str = ud.GetCodebybitmap(item, 128);               Boolean isEques = false;               foreach(String strss incode) {                   String[] a = strss.Split(':');                   if(str == a[1]) {                       chkcode += a[0];                       isEques = true;                       break;                   }               }               if(!isEques) {                   String strCurrent = "";                   doublemax = 0.0;                   foreach(String strss incode) {                       intlen1, len2, min, count = 0;                       String[] a = strss.Split(':');                       len1 = a[1].Length;                       len2 = str.Length;                       min = len1;                       if(min > len2) {                           min = len2;                       }                       for(inti = 0; i < min; i++) {                           if(str[i] == a[1][i]) {                               count++;                           }                       }                       doublecurrrent = (count * 100.0 / min);                       if(max < currrent) {                           max = currrent;                           strCurrent = a[0].Trim();                       }                   }                   chkcode += strCurrent.Trim();               }           }           returnchkcode;       } | 
通过这些处理后,识别成功率在90+%以上,
下面附上测试地址,代码 100%C#实现,方便asp.net调用,如果是C/C++实现 asp.net 调非托管的有些麻烦,非得放到System32 或是一个绝对路径下麻烦
测试地址
http://www.fox163.com/UniconTest.aspx
--幸福海
博客地址:http://www.cnblogs.com/ningqhai/
C#联通新版验证码识别的实现的更多相关文章
- 验证码识别--type7
		验证码识别--type7 一.干扰分析 有黑色边框,然后点干扰,线干扰 去边框 去点干扰 变成这样的结果,方便运算吗?也可以多种方式联合起来运算的.我相信在很多情况下,都可能会遇到类似的结果.我们人类 ... 
- 我不是机器人:谷歌最新版验证码系统ReCaptcha破解已开源
		选自 Github 作者:George Hughey 机器之心编译 每个人都讨厌验证码,这些恼人的图片中包含你必须输入的字符,我们只有正确地填写才能继续访问网站.验证码旨在确认访问者是人还是程序,并防 ... 
- CNN+BLSTM+CTC的验证码识别从训练到部署
		项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言 本项目适用于Python3.6,GPU>=NVIDIA GTX1050Ti,原mast ... 
- 深度优先搜索之小z的房子与验证码识别
		题目:小z的房子 高级语言程序设计实践题目:2.4 小z 的房子 ★实验任务 小z 通过自己的努力,终于发家致富.现在小明有一个大小为N*M 的 院子,雨后积起了水.四联通的积水被认为是连接在一起的. ... 
- Web安全之爆破中的验证码识别~
		写爆破靶场的时候发现对于爆破有验证码的有点意思~这里简单总结下我们爆破有验证码的场景中几种有效的方法~~~ 0x01 使用现成工具 这里有pkav团队的神器PKAV HTTP Fuzzer 1.5.6 ... 
- 【转】CNN+BLSTM+CTC的验证码识别从训练到部署
		[转]CNN+BLSTM+CTC的验证码识别从训练到部署 转载地址:https://www.jianshu.com/p/80ef04b16efc 项目地址:https://github.com/ker ... 
- [验证码识别技术] 字符型验证码终结者-CNN+BLSTM+CTC
		验证码识别(少样本,高精度)项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言 本项目适用于Python3.6,GPU>=NVIDIA G ... 
- Python实现各类验证码识别
		项目地址: https://github.com/kerlomz/captcha_trainer 编译版下载地址: https://github.com/kerlomz/captcha_trainer ... 
- 基于SVM的字母验证码识别
		基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波 ... 
随机推荐
- Union-Find Algorithm
			Union-Find Algrithm is used to check whether two components are connected or not. Examples: By using ... 
- poj 1511(spfa)
			---恢复内容开始--- http://poj.org/problem?id=1511 一个spfa类的模板水题. 题意:就是求从1到n个点的来回的所有距离和. 对spfa类的题还是不太熟练,感觉还是 ... 
- 在Linux服务器上配置phpMyAdmin
			使用php和mysql开发网站的话,phpmyadmin是一个非常友好的mysql管理工具,并且免费开源,国内很多虚拟主机都自带这样的管理工具,配置很简单,接下来在linux服务器上配置phpmyad ... 
- EF没有同步更新(转)
			不知道这算不算一个bug,当你新建一个从数据库生成的edmx时,他能正确的生成所有的tt文件,但是当你从数据库更新表结构时,他不能正确的更新tt文件,以建立Model1.edmx为例,在解决方案中展开 ... 
- python if __name__ == '__main__'解析
			废话不多说,正题: python中所有的模块都有一个内置属性 __name__,一个模块的 __name__ 的值取决于如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为 ... 
- java jsp调用shell(带参数)脚本并返回值
			test.jsp <%@ page language="java" import="java.util.List,java.util.ArrayList,java. ... 
- 好用的php类库和方法
			1, /** * 将一个平面的二维数组按照指定的字段转换为树状结构 * * 用法: * @code php * $rows = array( * array('id' => 1, 'value' ... 
- Excel统计工作簿sheet个数
			按Alt+F11调出VBE后,在"视图"-“立即窗口”中输入: debug.print ThisWorkbook.Sheets.Count 回车后就可看到工作表数量. 
- C#复制、粘贴文本信息到剪贴板
			复制:private void button1_Click(object sender, System.EventArgs e) { // Takes the selected text from a ... 
- chrome进入控制台时自动进入断点模式的解决方法
			简单粗暴,不知道为什么,去掉那个√就好了 
