驗(yàn)證碼識別技術(shù)
更新時(shí)間:2007年02月22日 00:00:00 作者:
由于現(xiàn)在很多網(wǎng)站,為了加強(qiáng)安全性,以及防止程序的自動操作網(wǎng)站,都加入的了驗(yàn)證碼技術(shù)。但卻給廣大站長推廣宣傳網(wǎng)站帶來的麻煩。所以我準(zhǔn)備寫這篇關(guān)于驗(yàn)證碼識別技術(shù)的文章,不足之處在所難免!本人從來不寫東西,今天為了想落伍才寫了!
廣大站長宣傳推廣自己的網(wǎng)站,經(jīng)常要發(fā)布一些宣傳廣告,如果靠人工,太慢太昂貴,所以理想的辦法是使用群發(fā)軟件,可現(xiàn)在很多網(wǎng)站都有驗(yàn)證碼,這成為群發(fā)軟件的技術(shù)難點(diǎn),而識別也就難點(diǎn)中的難點(diǎn),好的,閑話少說,言歸正傳!
我舉的例子是比較難于識別的驗(yàn)證碼,不討論不變形、不換字體、不換大小、不旋轉(zhuǎn)的驗(yàn)證碼,這里我可能不會寫出代碼,只是提供我編寫的思路,按照這個思路,我寫出的程序,比市場上出售的程序的識別率還要高很多。(有興趣的可以問我,我不想在這里幫別人宣傳,呵呵~~)
首先以數(shù)字驗(yàn)證碼開始,字母的要比數(shù)字麻煩一些,不過搞清楚了數(shù)字驗(yàn)證碼的識別,字母的也就不難了。
驗(yàn)證碼一般都是圖片,而且一般都是4位數(shù),處理過程是:先分割為4個部分,然后逐一識別,由于分割比較簡單,我這里就不說了,我這里只說如何識別。
我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,為什么要劃分為15個塊呢?先看圖!
○■○
■○■
■○■
■○■
○■○
○■○
■■○
○■○
○■○
■■■
■■■
○○■
■■■
■○○
■■■
■■■
○○■
■■■
○○■
■■■
我先舉這4個例子吧,其余的大家可以自己畫出來。如果做過驗(yàn)證碼識別的朋友,肯定很快就明白為什么劃分為15個塊,其實(shí)主要就是因?yàn)檫@樣劃分更合理,也就更能提高識別率。
我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,然后對每個塊進(jìn)行計(jì)算,當(dāng)每個塊里的有效象素超過多少百分比的時(shí)候,就標(biāo)記為 ■,如果沒超過就標(biāo)記為○,(這里為了顯示方便我使用了■,○,你完全可以把它標(biāo)為1、0),這里要注意一下,這里的百分比根據(jù)字體的粗細(xì)可以取 67%,50%,33%,20%,為什么要取這幾個數(shù)?主要和計(jì)算機(jī)的浮點(diǎn)數(shù)運(yùn)算有關(guān),選這幾個數(shù),運(yùn)算更快,且不容易出錯,否則計(jì)算機(jī)在進(jìn)行大量計(jì)算時(shí)也是會出錯的!當(dāng)然這里,你完全可以選適合你的驗(yàn)證碼圖片的百分比?。?
如果驗(yàn)證碼不變形、不換字體、不換大小、不旋轉(zhuǎn),我們的識別工作到這一步基本上就結(jié)束了,因?yàn)橐呀?jīng)可以得到比較清晰的塊圖,對付大多數(shù)論壇,就已經(jīng)足夠了。^_^
如果驗(yàn)證碼的變形比較大、且有很多字體、大小也不固定、且有旋轉(zhuǎn),那么我們經(jīng)過劃分、取比率顯示后,可能會得到這樣一個圖:
○■○
○○■
○■○
■○○
■■■
那么這個數(shù)字應(yīng)該是什么數(shù)字,我們需要使用排除法!排除所有不可能,在0123456789中,這個圖不可能是013456789,他只能是 :2。
寫過驗(yàn)證碼識別的朋友可能已經(jīng)明白了!是的,我們需要建立一個類似的數(shù)據(jù)庫,也就是識別庫,出現(xiàn)哪些圖,他就屬于那個數(shù)字。
再舉一個例子:
○■○
■○○
■■■
■○■
○■○
這是哪個數(shù)字呢??是6,沒錯
我這里我需要再說明一下為什么要取5行,3列,15個塊,因?yàn)閴K太多了你 的識別庫就會很大,塊太少了,就會出現(xiàn)很多分不清楚的塊圖。
另外你取的百分比也需要注意,不能太大也不能太小。
好了,等做好自己的數(shù)據(jù)庫,這時(shí)就可以識別大部分?jǐn)?shù)字了。
最后還有一個問題,就是重復(fù)的問題,比如,圖片上的數(shù)字,明明是 5,可由于它的字體不是常見的字體,且發(fā)生了旋轉(zhuǎn),最后得到這樣一個圖:
■■■
■○○
■■■
■○■
■■■
在我的數(shù)據(jù)庫里,這個塊圖,是6,也是就說識別錯誤,怎么辦?
我的解決方法是,在數(shù)據(jù)庫里先把這條數(shù)據(jù)刪除因?yàn)檫@個是錯誤的。
遇到這種情況,就需要進(jìn)行二次處理,我的方法是:降低百分比,這時(shí)就得到了:
■■○
■○○
■■○
○○■
■■○
OK,經(jīng)過降低百分比,圖片就由“6”又變?yōu)椤?”了,呵呵~~~由于降低了百分比,我們需要再建立一個識別庫的來存儲這些數(shù)據(jù)。
廣大站長宣傳推廣自己的網(wǎng)站,經(jīng)常要發(fā)布一些宣傳廣告,如果靠人工,太慢太昂貴,所以理想的辦法是使用群發(fā)軟件,可現(xiàn)在很多網(wǎng)站都有驗(yàn)證碼,這成為群發(fā)軟件的技術(shù)難點(diǎn),而識別也就難點(diǎn)中的難點(diǎn),好的,閑話少說,言歸正傳!
我舉的例子是比較難于識別的驗(yàn)證碼,不討論不變形、不換字體、不換大小、不旋轉(zhuǎn)的驗(yàn)證碼,這里我可能不會寫出代碼,只是提供我編寫的思路,按照這個思路,我寫出的程序,比市場上出售的程序的識別率還要高很多。(有興趣的可以問我,我不想在這里幫別人宣傳,呵呵~~)
首先以數(shù)字驗(yàn)證碼開始,字母的要比數(shù)字麻煩一些,不過搞清楚了數(shù)字驗(yàn)證碼的識別,字母的也就不難了。
驗(yàn)證碼一般都是圖片,而且一般都是4位數(shù),處理過程是:先分割為4個部分,然后逐一識別,由于分割比較簡單,我這里就不說了,我這里只說如何識別。
我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,為什么要劃分為15個塊呢?先看圖!
○■○
■○■
■○■
■○■
○■○
○■○
■■○
○■○
○■○
■■■
■■■
○○■
■■■
■○○
■■■
■■■
○○■
■■■
○○■
■■■
我先舉這4個例子吧,其余的大家可以自己畫出來。如果做過驗(yàn)證碼識別的朋友,肯定很快就明白為什么劃分為15個塊,其實(shí)主要就是因?yàn)檫@樣劃分更合理,也就更能提高識別率。
我的方法是把需要識別的圖片,劃分為 5 行,3 列,15個塊,然后對每個塊進(jìn)行計(jì)算,當(dāng)每個塊里的有效象素超過多少百分比的時(shí)候,就標(biāo)記為 ■,如果沒超過就標(biāo)記為○,(這里為了顯示方便我使用了■,○,你完全可以把它標(biāo)為1、0),這里要注意一下,這里的百分比根據(jù)字體的粗細(xì)可以取 67%,50%,33%,20%,為什么要取這幾個數(shù)?主要和計(jì)算機(jī)的浮點(diǎn)數(shù)運(yùn)算有關(guān),選這幾個數(shù),運(yùn)算更快,且不容易出錯,否則計(jì)算機(jī)在進(jìn)行大量計(jì)算時(shí)也是會出錯的!當(dāng)然這里,你完全可以選適合你的驗(yàn)證碼圖片的百分比?。?
如果驗(yàn)證碼不變形、不換字體、不換大小、不旋轉(zhuǎn),我們的識別工作到這一步基本上就結(jié)束了,因?yàn)橐呀?jīng)可以得到比較清晰的塊圖,對付大多數(shù)論壇,就已經(jīng)足夠了。^_^
如果驗(yàn)證碼的變形比較大、且有很多字體、大小也不固定、且有旋轉(zhuǎn),那么我們經(jīng)過劃分、取比率顯示后,可能會得到這樣一個圖:
○■○
○○■
○■○
■○○
■■■
那么這個數(shù)字應(yīng)該是什么數(shù)字,我們需要使用排除法!排除所有不可能,在0123456789中,這個圖不可能是013456789,他只能是 :2。
寫過驗(yàn)證碼識別的朋友可能已經(jīng)明白了!是的,我們需要建立一個類似的數(shù)據(jù)庫,也就是識別庫,出現(xiàn)哪些圖,他就屬于那個數(shù)字。
再舉一個例子:
○■○
■○○
■■■
■○■
○■○
這是哪個數(shù)字呢??是6,沒錯
我這里我需要再說明一下為什么要取5行,3列,15個塊,因?yàn)閴K太多了你 的識別庫就會很大,塊太少了,就會出現(xiàn)很多分不清楚的塊圖。
另外你取的百分比也需要注意,不能太大也不能太小。
好了,等做好自己的數(shù)據(jù)庫,這時(shí)就可以識別大部分?jǐn)?shù)字了。
最后還有一個問題,就是重復(fù)的問題,比如,圖片上的數(shù)字,明明是 5,可由于它的字體不是常見的字體,且發(fā)生了旋轉(zhuǎn),最后得到這樣一個圖:
■■■
■○○
■■■
■○■
■■■
在我的數(shù)據(jù)庫里,這個塊圖,是6,也是就說識別錯誤,怎么辦?
我的解決方法是,在數(shù)據(jù)庫里先把這條數(shù)據(jù)刪除因?yàn)檫@個是錯誤的。
遇到這種情況,就需要進(jìn)行二次處理,我的方法是:降低百分比,這時(shí)就得到了:
■■○
■○○
■■○
○○■
■■○
OK,經(jīng)過降低百分比,圖片就由“6”又變?yōu)椤?”了,呵呵~~~由于降低了百分比,我們需要再建立一個識別庫的來存儲這些數(shù)據(jù)。
相關(guān)文章
判斷Session的過期時(shí)間 采用JavaScript實(shí)時(shí)顯示剩余多少秒
判斷Session的過期時(shí)間-采用JavaScript顯示剩余多少秒2008-12-12ASP中if語句、select 、while循環(huán)的使用方法
這篇文章主要介紹了ASP中if語句、select 、while循環(huán)的使用方法,需要的朋友可以參考下2015-11-11ASP正則表達(dá)式清除HTML指定標(biāo)簽的方法
這篇文章主要介紹了ASP正則表達(dá)式清除HTML指定標(biāo)簽的方法,告訴大家如何精準(zhǔn)的過濾掉某些特定的屬性標(biāo)簽和參數(shù),感興趣的小伙伴們可以參考一下2015-09-09asp 驗(yàn)證用戶名是否包含有非常字符的函數(shù)
asp 驗(yàn)證用戶名是否包含有非常字符的函數(shù)...2007-08-08