Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As LongPublic Function PicNnmber_Decode1(ByVal PicHandle As PictureBox) As String
Dim a(10) As String
a(0) = "0111111110"
a(1) = "0100000001"
a(2) = "0100000011"
a(3) = "0100000010"
a(4) = "0000011000"
a(5) = "1111100010"
a(6) = "0011111110"
a(7) = "1100000000"
a(8) = "0111011110"
a(9) = "0111100000"
With PicHandle
    For k = 0 To 3
        p = ""
        For i = 0 To 9
        X = GetPixel(.hdc, k * 10, i)
        Debug.Print X
        If X = 15724527 Or X = 15658734 Or X = 15395562 Or X = 8684164 Then
        p = p & "0"
        Else
        p = p & "1"
        End If
        Next i
        For j = 0 To 9
        If a(j) = p Then PicNnmber_Decode1 = PicNnmber_Decode1 & j
        Next
    Next k
End With
If Len(PicNnmber_Decode1) < 4 Then PicNnmber_Decode1 = PicNnmber_Decode2(PicHandle)
End FunctionPublic Function PicNnmber_Decode2(ByVal PicHandle As PictureBox) As String
With PicHandle
    For l = 0 To 3
    p = ""
    For i = 0 To 9
    For j = l * 10 To l * 10 + 9
    X = GetPixel(.hdc, j, i)
    If X = 214 Or X = 204 Or X = 211 Or X = 15663351 Or X = 16711935 Or X = 15597812 Then
    p = p & "1"
    Else
    p = p & "0"
    End If
    Next
    Next
    PicNnmber_Decode2 = PicNnmber_Decode2 & GetNumber(p)
    Next
End With
End FunctionPublic Function GetNumber(ByVal BumberData As String) As String
Dim ChrNumber(10) As String
ChrNumber(0) = "0001111000001000010000100001000010110100001011010000101101000010110100001000010000100001000001111000"
ChrNumber(1) = "0000100000001110000000001000000000100000000010000000001000000000100000000010000000001000000011111000"
ChrNumber(2) = "0001111000001000010000100001000000000100000000100000000100000000100000000100000000100001000011111100"
ChrNumber(3) = "0001111000001000010000100001000000001000000011000000000010000000000100001000010000100001000001111000"
ChrNumber(4) = "0000010000000001000000001100000001010000001001000000100100000011111100000001000000000100000000111100"
ChrNumber(5) = "0011111100001000000000100000000010111000001100010000000001000000000100001000010000100001000001111000"
ChrNumber(6) = "0000111000000100010000100000000010000000001011100000110001000010000100001000010000100001000001111000"
ChrNumber(7) = "0011111100001000100000100010000000010000000001000000001000000000100000000010000000001000000000100000"
ChrNumber(8) = "0001111000001000010000100001000010000100000111100000010010000010000100001000010000100001000001111000"
ChrNumber(9) = "0001110000001000100000100001000010000100001000110000011101000000000100000000010000100010000001110000"
For k = 0 To 9
For i = 1 To Len(ChrNumber(k))
cob1 = Right(Left(ChrNumber(k), i), 1)
If cob1 = "1" Then
If Not (cob1 = Right(Left(BumberData, i), 1)) Then Exit For
End If
Next
If i > Len(ChrNumber(k)) - 2 Then GetNumber = k: Exit Function
Next
End Function
有空来我网站做做HTTP://www.souker.com

解决方案 »

  1.   

    能否介绍一下验证码图片弄到picturebox上的方法?
      

  2.   

    看样子这个是根据dvbbs的验证码程序写的解码程序
      

  3.   

    这个针对dvbbs当前所有版本有效
    具体可以去我官方网站http://www.souker.com
    以前是专门作论坛类营销软件的
    现在改行做挂级网站了
      

  4.   

    如果验证码加上随机字体\随机字体大小\随机颜色\随机位置\随机干扰点\随机背景,这种办法就很难奏效了.
    csdn登陆界面的那个验证码是最没用了,所有字体一模一样,一个颜色、一样的大小、位置中规中矩。最郁闷的是输错密码了重新再输验证码居然不变?!%^$^$%#*^%^&
      

  5.   

    其实还有个问题,dvbbs上面的注册码图片怎么得到??
      

  6.   

    我已研究出验证码图片取得方法
    测试:
    先打开一个含有验证码图片的网页。--------(网页1)
    再打开http://xxx.xxx.com/DV_getcode.asp -------(网页2)
    网页1中输入网页2中显示的 验证码,提交,能正常提交。DV_getcode.asp得到的就是图片,可以下载到本地。
      

  7.   

    csdn登陆界面的那个验证码是最没用了,所有字体一模一样,一个颜色、一样的大小、位置中规中矩。最郁闷的是输错密码了重新再输验证码居然不变?!%^$^$%#*^%^&如何解呀