过期域名预定抢注

 找回密碼
 免费注册

驗證碼識別技術

[複製鏈接]
發表於 2007-12-10 16:15:54 | 顯示全部樓層 |閱讀模式
由於現在很多網站,為了加強安全性,以及防止程序的自動操作網站,都加入的了驗證碼技術。但卻給廣大站長推廣宣傳網站帶來的麻煩。所以我準備寫這篇關於驗證碼識別技術的文章,不足之處在所難免!本人從來不寫東西,今天為了想落伍才寫了!8 \' a! y# T& h

) D, u( [! }$ O: D2 U8 _# L- r     廣大站長宣傳推廣自己的網站,經常要發佈一些宣傳廣告,如果人工,太慢太昂貴,所以理想的辦法是使用群發軟件,可現在很多網站都有驗證碼,這成為群發軟件的技術難點,而識別也就難點中的難點,好的,閒話少說,言歸正傳!
+ W* p4 W5 ?1 a) I# Y( [
9 e: t0 a" _5 C    我舉的例子是比較難於識別的驗證碼,不討論不變形、不換字體、不換大小、不旋轉的驗證碼,這裡我可能不會寫出代碼,只是提供我編寫的思路,按照這個思路,我寫出的程序,比市場上出售的程序的識別率還要高很多。(有興趣的可以問我,我不想在這裡幫別人宣傳,呵呵~~): J, H$ T! e3 @. h4 G- P$ N
# ~/ f7 r8 \* R' H& Y0 {* p
    首先以數字驗證碼開始,字母的要比數字麻煩一些,不過搞清楚了數字驗證碼的識別,字母的也就不難了。. V3 p6 A5 C1 i4 w% J$ Z, o

& U% j. n$ r6 h# b: a    驗證碼一般都是圖片,而且一般都是4位數,處理過程是:先分割為4個部分,然後逐一識別,由於分割比較簡單,我這裡就不說了,我這裡只說如何識別。7 b- D* {; D. _/ b- E8 K) d% J
' W& {7 n5 ~) s! r% f4 \" ?
    我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,為什麼要劃分為15個塊呢?先看圖!
! x' R+ @: E0 M  t9 p6 R2 G○■○
& l" h0 Y+ U0 ^2 B4 C$ v0 w* G) [! k■○■
" I7 E, [* B7 r: b2 t( E  U■○■, y, ^. \. u% E6 x
■○■
2 M# S* u5 |8 P1 n+ D7 W1 S○■○
$ m( [( \  P8 F# |4 I
$ @; z% C+ K3 N  `○■○  s) c  y, @) {& }; ~# }  i
■■○
: K+ E7 _9 O% j  g1 e○■○4 I% s# j0 M$ f* F4 \; ^7 q
○■○* T, I* @+ Z' i  t; i4 a
■■■
3 `+ K+ S' O1 Y! U5 k3 Y" q. w' s. r
■■■
  E( l' H. c4 Y3 |( Z9 {! y○○■
6 }9 n' v# b0 s. ]; Z■■■
% j% B" z1 ]/ q+ w$ Y/ f■○○
! n! n" @5 z4 h* n1 P! V■■■5 ?! J( L# _  c. M, \
# F* g) e! ~' Z3 f0 j3 v  k
■■■
- ^! P+ A) O( m○○■; S7 Q8 e# O8 f
■■■- V2 V0 I- g3 ^& S! q) P5 O# R
○○■
# O6 W- f! N2 g! A: X■■■' c$ E' w+ `0 h  R, ~. c$ Q
我先舉這4個例子吧,其餘的大家可以自己畫出來。如果做過驗證碼識別的朋友,肯定很快就明白為什麼劃分為15個塊,其實主要就是因為這樣劃分更合理,也就更能提高識別率。
5 f8 }2 Y, p2 s  A9 L
% Y  O- x/ }% Q  e5 L5 S9 j    我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,然後對每個塊進行計算,當每個塊裡的有效象素超過多少百分比的時候,就標記為 ■,如果沒超過就標記為○,(這裡為了顯示方便我使用了■,○,你完全可以把它標為1、0),這裡要注意一下,這裡的百分比根據字體的粗細可以取 67%,50%,33%,20%,為什麼要取這幾個數?主要和計算機的浮點數運算有關,選這幾個數,運算更快,且不容易出錯,否則計算機在進行大量計算時也是會出錯的!當然這裡,你完全可以選適合你的驗證碼圖片的百分比!!
. w; }+ @; q5 K5 K2 }
+ F8 Y" J2 h' o/ q  R    如果驗證碼不變形、不換字體、不換大小、不旋轉,我們的識別工作到這一步基本上就結束了,因為已經可以得到比較清晰的塊圖,對付大多數論壇,就已經足夠了。^_^
' s* T' @# y/ z( T" s5 b+ }3 p) l3 d- o2 a! _. N+ T
   如果驗證碼的變形比較大、且有很多字體、大小也不固定、且有旋轉,那麼我們經過劃分、取比率顯示後,可能會得到這樣一個圖:
' n# s- F: w" _8 e7 f" d: y* m○■○) K/ r* h5 F4 \
○○■
; p5 p( z4 M/ e4 s0 Y○■○2 }6 U. ^/ r4 a/ y9 E. A+ z" u& `
■○○
' [! r2 K, L1 ~7 [■■■
; Y7 s9 t9 S' x8 j- K    那麼這個數字應該是什麼數字,我們需要使用排除法!排除所有不可能,在0123456789中,這個圖不可能是013456789,他只能是 :2。$ P$ t! N) t/ s  k9 q# t0 ]

' `" {) f# ^( B% o/ W    寫過驗證碼識別的朋友可能已經明白了!是的,我們需要建立一個類似的數據庫,也就是識別庫,出現哪些圖,他就屬於那個數字。
9 f4 W- Q% e+ U4 p7 _4 S& W) A) D   再舉一個例子:9 I  p! K3 B  |9 [
○■○) ^* r( S& Z" ?( i: H
■○○7 o5 @0 M1 N+ N, t+ P9 Q! e0 c- n, Q
■■■
: r9 K# n9 C9 D! g+ j1 a+ k9 I$ |- T. O■○■% B; Q/ T# f$ C: ?/ Q
○■○$ u5 q; \7 S) }9 w$ L- ]1 S( _" b
     這是哪個數字呢??是6,沒錯* `& q+ D$ Q8 H# ?8 z$ y" t

  R" I: T; M7 N" ^7 V) G# p* o4 b     我這裡我需要再說明一下為什麼要取5行,3列,15個塊,因為塊太多了你 的識別庫就會很大,塊太少了,就會出現很多分不清楚的塊圖。3 _8 }; @5 P% T7 `# Z7 \

! d: j% u2 f3 ]9 j- U- [9 L    另外你取的百分比也需要注意,不能太大也不能太小。! [. \$ Z1 T; c0 R% @. `0 ~; G' ?
; K& v" b2 c  s3 Q+ H% X( c9 u/ j
     好了,等做好自己的數據庫,這時就可以識別大部分數字了。
, S7 n# M; Q. _9 u* R
! l. F% A# p: V# K    最後還有一個問題,就是重複的問題,比如,圖片上的數字,明明是 5,可由於它的字體不是常見的字體,且發生了旋轉,最後得到這樣一個圖:
6 h: }; y3 D3 D, _; _■■■
4 U& [4 U1 y1 d& O2 F■○○; [: v0 T# _/ Y! h
■■■7 T! M0 ~( F& @8 n+ p
■○■2 F' T* J& K2 _( a- o+ _* I! U$ A
■■■
% i- U+ l$ l  b+ {0 R1 I   在我的數據庫裡,這個塊圖,是6,也是就說識別錯誤,怎麼辦?
/ I7 R/ e- p+ X+ J. L' i/ E$ Z4 l1 e, Q1 ]- ]
    我的解決方法是,在數據庫裡先把這條數據刪除因為這個是錯誤的。+ W: b: J" B) ~
# ]% {3 R/ S4 Z* r( k. B
    遇到這種情況,就需要進行二次處理,我的方法是:降低百分比,這時就得到了:+ Q, t/ x$ N/ l( C% s* x
■■○. b( C& r: U5 y" I' e( W. K
■○○
1 Z/ x  S' N  W4 A' K■■○
( @  a6 a* Q1 U" `○○■4 Q7 h" ]9 d/ d  x7 L' C
■■○4 [4 s3 W% s+ D2 e6 M. I; m
     OK,經過降低百分比,圖片就由「6」又變為「5」了,呵呵~~~由於降低了百分比,我們需要再建立一個識別庫的來存儲這些數據。
發表於 2007-12-10 16:25:19 | 顯示全部樓層
呵呵  學習了
回復 给力 爆菊

使用道具 舉報

發表於 2007-12-14 10:32:54 | 顯示全部樓層
: 不明白,不過學習了...
回復 给力 爆菊

使用道具 舉報

發表於 2008-1-6 15:33:26 | 顯示全部樓層
學習:
回復 给力 爆菊

使用道具 舉報

發表於 2008-1-6 15:57:26 | 顯示全部樓層
不明白誒
回復 给力 爆菊

使用道具 舉報

發表於 2008-1-7 19:53:47 | 顯示全部樓層
寫的很不錯的.
回復 给力 爆菊

使用道具 舉報

發表於 2008-1-7 20:05:05 | 顯示全部樓層
驗證碼識別技術  P+ X" }( z2 F3 P" R
做驗證的最後一道門檻了
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

过期高净值品牌域名预定抢注

點基跨境 數位編輯創業論壇

GMT+8, 2025-6-6 16:12

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表