ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 蓝天630902

[分享] 验证码识别讲座

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-6 21:07 | 显示全部楼层
本帖已被收录到知识树中,索引项:图像处理和GDI
蓝天630902 发表于 2012-8-5 19:04
图形文件 位图信息头 详细解释

对于 “图形文件 位图信息头 详细解释.rar“,我仔细欣赏了一下大哥的作品,发现里面只是些提取验证码的一些基本信息的代码,并未涉及到表二。我很困惑,你的表二有何作用?

TA的精华主题

TA的得分主题

发表于 2012-8-6 21:13 | 显示全部楼层
蓝天630902 发表于 2012-8-6 21:04
对于https://jx.ac.10086.cn/sso3/common/image.jsp
看看下面附件中的21行,应该可以理解,这就是数组的 ...

恕我愚昧,你的b数组有30个、c数组有30个,而你的第21行却只有4个b数组的数据?还有其它的几十个数组从何而来?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-6 21:16 | 显示全部楼层
其实呢,已经涉及了表二,

Offset
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
28
00
00
00
3F
00
00
00
16
00
00
00
01
00
08
00
16
00
00
00
00
80
05
00
00
00
00
00
00
00
00
00
00
32
00
01
00
00
00
01
00
00
 
 
 
 
 
 
 
 


就是位图信息头的16进制表示。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-6 21:22 | 显示全部楼层
cumulonimbus 发表于 2012-8-6 21:13
恕我愚昧,你的b数组有30个、c数组有30个,而你的第21行却只有4个b数组的数据?还有其它的几十个数组从何 ...

你多运行几次,就会慢慢出来,
不可能一次出来30个,验证码每次就四个,
比如说,“A”下面是“123345559b6”,你就让填c(8) = "A",b(8) = "123345559b6"…………
直到b数组和c数组全部填满,明白?

TA的精华主题

TA的得分主题

发表于 2012-8-6 21:34 | 显示全部楼层
蓝天630902 发表于 2012-8-6 21:22
你多运行几次,就会慢慢出来,
不可能一次出来30个,验证码每次就四个,
比如说,“A”下面是“123345 ...

验证码里面的字符有可能是重复的,偶的神呀,如果是汉字,要把所有的数据都按出来,得按多少次呀
就算是英文字母,要按出多少次才能得到26个不重复的数据呀。
谢谢大哥指教,否则我还一直以为你有一个密码本,可以自由对换数据呢?

TA的精华主题

TA的得分主题

发表于 2012-8-6 22:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-8-6 23:52 | 显示全部楼层
蓝天630902 发表于 2012-8-6 21:22
你多运行几次,就会慢慢出来,
不可能一次出来30个,验证码每次就四个,
比如说,“A”下面是“123345 ...

你的方法很聪明。先把验证码用1的方法拷贝到单元格中,然后统计每列有多少个1,从而组成一组数据,这组数据就成了这个验证码的唯一标识符。然后运用这个唯一的标识符来倒推出这个唯一的验证码来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-7 05:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 蓝天630902 于 2012-8-7 05:51 编辑
cumulonimbus 发表于 2012-8-6 23:52
你的方法很聪明。先把验证码用1的方法拷贝到单元格中,然后统计每列有多少个1,从而组成一组数据,这组数 ...


这种方法叫做“压扁法”。对于那些无噪声的图片,特别有效。但是,对于那些有明显干扰(噪声)的图片,这种方法就不灵了。就要用到另一种叫做“字模相似法”了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-7 05:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
其实,也用不着拷贝到单元格,那样慢极了。为什么明知道慢还要操作单元格呢?因为这里是开讲座,主要是便于大家理解。如果直接操作数组,肯定要快许多。

TA的精华主题

TA的得分主题

发表于 2012-8-7 10:48 | 显示全部楼层
本帖最后由 cumulonimbus 于 2012-8-7 12:52 编辑

        For i = 1 To a2 * a3    '没有调色板的话就从第40个字节开始,图像的每一个点(用3个字节表示:(蓝,绿,红),有调色板的话就从第lClipSize - a2 * a3个字节开始,图像的每一个点用1个字节表示,{换作其他网址,这一循环要改}
            arr(i) = ""    '1或空(就是没有)的设置,是图片显示方式不同,可以更改这个设置,来看看效果,不过要把下面的arr(i) = 1一起改。
            ts = 0    '置初值
            For j = 0 To a5 - 1
                ts = ts + Val(bytClipData((i - 1) * a5 + a1 + j))    '累加
            Next j
            ts = ts / a5    '图像的BGR的均值(不一定),有调色板的话就不是这个意思。应该说成是图片点的信息均值更贴切些
            If ts > 180 Then    '如果图像的BGR的均值>0,那么就把“1”赋给数组arr(i)
                arr(i) = "1"    '其实就是归一化处理成1
            End If
            'If i / a2 = Int(i / a2) Then a1 = a1 + 2    '防歪,不歪的话,这一句不需要,所以先注释掉。并且a1 = a1 + 2,也有可能是a1 = a1 + 3、或者a1 = a1 + 1,等等,这里需要你自己去调试
        Next i

对于前面我看不懂,大哥能否指教一下哈
如:arr(i)啥时要为1,啥时要为空?
如:ts大于180还是130,这个数值又是从哪里来的?
如: ts = ts + Val(bytClipData((i - 1) * a5 + a1 + j))    这个是什么意思?

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 16:45 , Processed in 0.052020 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表