注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一剪梅的博客

一剪寒梅,傲立雪中!爱我所爱,无怨无悔!

 
 
 

日志

 
 

识别登录验证码  

2009-03-21 21:50:13|  分类: 电脑技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1. 验证码所在页面地址:http://passport.taskcn.com/login

2.验证码id : authimg

3.验证码图片格式:png

结果:顺利完成

第一步: 获得图片,复制到剪贴版

Public Sub getImagebyId(ByVal s As String, ByVal o As HTMLDocument)

Dim o1 As Object

Set X = o.getElementById(s)
Set o1 = o.body.createControlRange()
o1.Add (X)
o1.execCommand ("Copy")
   Set o1 = Nothing
Set X = Nothing

End Sub

第二步 从剪贴板把图片数据读到内存数组a,并做简单整理,灰度数(huidushu)=80

Public Sub getValueForA(ByVal huidushu As Byte)
Dim bmpHandle As Long
OpenClipboard 0
bmpHandle = GetClipboardData(2)
GetObject bmpHandle, Len(bmp), bmp


ReDim a(-1 To bmp.bmWidth + 1, -1 To bmp.bmHeight + 1)
dc = CreateCompatibleDC(0)

SelectObject dc, bmpHandle
For gao = 0 To bmp.bmHeight - 1
For kuan = 0 To bmp.bmWidth - 1


a(kuan, gao).dot = IIf(huidu(GetPixel(dc, kuan, gao)) < huidushu, 1, 0)

Next kuan
   
Next gao
ReleaseDC 0, dc
CloseClipboard

SuanTag bmp.bmWidth, bmp.bmHeight

'去掉孤立点
For kuan = 1 To bmp.bmWidth - 2: For gao = 1 To bmp.bmHeight - 2
        If a(kuan, gao).dot = 1 Then
        Select Case a(kuan, gao).tag
        Case 1, 4, 64, 128
        a(kuan, gao).dot = 0
          NearTag kuan, gao
        End Select
       
        End If
    Next: Next

End Sub

第三步 开始识别 去掉干扰线后,数字形态统一,所以容易识别。通过对每个数字第一列的黑点的累积值,即可完成任务。

...

Private Function getNumber(ByVal id As Long) As Long
Dim i As Long
Dim idStr As String
Dim a() As String
idStr = "0,36,40,164,234,1016,1218,250,510,362"
a = Split(idStr, ",")
For i = 0 To 9
If Val(a(i)) = id Then Exit For
Next
getNumber = i
End Function

  评论这张
 
阅读(44)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018