一種圖片驗證碼生成方法及系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及驗證碼相關技術領域,特別是一種圖片驗證碼生成方法及系統(tǒng)。
【背景技術】
[0002]因為簡單易用等原因,現(xiàn)在互聯(lián)網(wǎng)中主流的驗證碼是圖片驗證碼。圖片驗證碼與圖像處理技術息息相關,如:字符的嵌入、噪音的添加等,需要用到基本的圖像處理知識。而圖片驗證碼的破解就顯得比較的復雜,它不僅需要專業(yè)的圖片處理知識,還需要人工智能方面的知識,不過,隨著人工智能的發(fā)展以及開源工具的流行,簡單的圖片驗證碼識別變得也越來越容易。
[0003]目前,圖片驗證碼的設計以圖片內容大致可以分為以下三種:
[0004](I)使用最基本的、最流行是一種以隨機字符、數(shù)字作為圖片內容的驗證碼。這種驗證碼字符長度通常都是固定的(長度為4),在隨機字符的情況下可以根據(jù)需要添加相應的干擾元素,比如:背景色、干擾線等。在這種驗證碼系統(tǒng)中,根據(jù)干擾元素特征又可以分為兩種:1、采用相對固定的干擾因素。這種驗證碼干擾元素肉眼看起來變化挺大,但是對計算機來說變化不大,比如背景色,即使背景色不斷變化,但是一般都是很容易去除的;再比如說字符的位置甚至字體都是固定或者字符串整體左右漂移的,其實對于計算機來說都很容易找到字符所在區(qū)域,這種驗證碼破解比較容易。2、干擾因素出現(xiàn)有一定的隨機性。這種驗證碼干擾因素有了較大的隨機性,比如干擾線的位置、字符的字體、字符的相對位置、字符旋轉角度等都是在不斷的變化,但是這種驗證碼用戶體驗一般都不是太好,比如字符旋轉,通常情況下字符選裝方向以及角度都是不固定的,肉眼識別的時候需要人們下意識的把頭左右傾斜才能看清楚;字符字體的變化通常都是在不同圖片中采用不同的字體方式,而同一張圖片中的字體大多都是一樣的,即使是采用多種字體,比如:中空字體、實心字體、上下兩色處理、陰影處理等,其實這些無非是把幾種驗證碼合并到了一塊,前后兩張圖片的差別太大,影響用戶體驗。
[0005](2)以專業(yè)知識作為圖片內容的驗證碼。比如:數(shù)學專業(yè)性比較強網(wǎng)站可以采用數(shù)學中常用的積分來作為驗證碼內容,驗證碼需要積分的結果;電子類專業(yè)性比較強的網(wǎng)站可以采用類似“電流的單位是歐姆”你只需要判斷正確性就行。
[0006](3)以復雜的圖像作為驗證碼內容。比如一幅完整的帶有圖案的圖片,中間對一個圓形區(qū)域做一定的旋轉,驗證時需要旋轉中間的區(qū)域使圖案復原成一幅完整的圖像算驗證正確;或者是一種帶有幾只小狗的圖案,你需要回答圖案中有小狗的等。
[0007]現(xiàn)有技術方案的缺點
[0008]現(xiàn)有的看似較為復雜的干擾因素其實對計算機起到的干擾作用非常小,而某些看似簡單的干擾因素計算機卻很難識別。對于傳統(tǒng)的圖片驗證碼系統(tǒng)來說,背景色所起到的作用幾乎可以忽略不計,為了肉眼能較好的識別,字符的顏色肯定要和背景色明顯的區(qū)分開,如果不能很好的區(qū)分開,人肉眼識別的難度就會很大影響用戶體驗,但是如果背景色容易區(qū)分的話,那么那些看似復雜的背景色對于計算機來說非常容易,這樣背景色就起不到應有的作用,并且復雜的背景色對一些色弱、色盲用戶具有嚴重的干擾作用,不利于他們的使用;一些驗證碼采用字符扭曲作為干擾因素,現(xiàn)有的扭曲都是采用字符旋轉的方式進行的,由于每個字符選裝的方向不一樣,這樣肉眼識別的時候就會較為困難;
[0009]對于一些復雜的驗證碼,比如每個字符都有扭曲,而且每個字符的扭曲力度、方向都不相同,這種驗證碼機器的確很難識別,但是人肉眼的識別難度很高,不利于用戶體驗,這些顯然不利于用戶的體驗,畢竟網(wǎng)絡系統(tǒng)是服務于人的,系統(tǒng)的第一作用應該是提供服務,而不是去防止別人去非法使用它。
【發(fā)明內容】
[0010]基于此,有必要針對現(xiàn)有技術未能提供一種肉眼更容易識別,但是計算機更難以破解的圖片驗證碼的生成方式的技術問題,提供一種圖片驗證碼生成方法及系統(tǒng)。
[0011]一種圖片驗證碼生成方法,包括:
[0012]字符串選擇步驟,包括:從字符集中隨機選出一組包括多個字符的字符串,所述字符串的長度隨機確定;
[0013]字體渲染步驟,包括:對所述字符串所包括的每個字符從字體集中隨機選擇一種字體和字號進行渲染處理得到渲染字符,所述字體庫包括多種字體,且每種字體具有多種字號,所述η和m為預設的自然數(shù);
[0014]字體扭曲步驟,包括:對每個所述渲染字符進行扭曲處理得到扭曲字符;
[0015]圖片預生成步驟,包括:生成包括多個所述扭曲字符的圖片;
[0016]干擾線添加步驟,包括:在所述圖片上生成至少一條干擾線得到圖片驗證碼,所述干擾線的軌跡隨機生成。
[0017]一種圖片驗證碼生成系統(tǒng),包括:
[0018]字符串選擇模塊,用于:從字符集中隨機選出一組包括多個字符的字符串,所述字符串的長度隨機確定;
[0019]字體渲染模塊,用于:對所述字符串所包括的每個字符從字體集中隨機選擇一種字體和字號進行渲染處理得到渲染字符,所述字體庫包括多種字體,且每種字體具有多種字號;
[0020]字體扭曲模塊,用于:對每個所述渲染字符進行扭曲處理得到扭曲字符;
[0021]圖片預生成模塊,用于:生成包括多個所述扭曲字符的圖片;
[0022]干擾線添加模塊,用于:在所述圖片上生成至少一條干擾線得到圖片驗證碼,所述干擾線的軌跡隨機生成。
[0023]本發(fā)明的干擾元素僅僅使用肉眼容易識別的干擾線、以及對字符進行扭曲而不是進行字符的旋轉,這些因素很大程度的提高了驗證碼的用戶體驗;而字符長度的不固定、干擾線軌跡的不固定、字符字體不同則增大了計算機識別驗證碼的難度,有效的保證了系統(tǒng)的安全性。
【附圖說明】
[0024]圖1為本發(fā)明一種圖片驗證碼生成方法的工作流程圖;
[0025]圖2為本發(fā)明的最佳實施例的工作流程圖;
[0026]圖3為本發(fā)明一種圖片驗證碼生成系統(tǒng)的結構模塊圖。
【具體實施方式】
[0027]下面結合附圖和具體實施例對本發(fā)明做進一步詳細的說明。
[0028]如圖1所示為本發(fā)明一種圖片驗證碼生成方法的工作流程圖,包括:
[0029]步驟S101,包括:從字符集中隨機選出一組包括多個字符的字符串,所述字符串的長度隨機確定;
[0030]步驟S102,包括:對所述字符串所包括的每個字符從字體集中隨機選擇一種字體和字號進行渲染處理得到渲染字符,所述字體庫包括多種字體,且每種字體具有多種字號;
[0031]步驟S103,包括:對每個所述渲染字符進行扭曲處理得到扭曲字符;
[0032]步驟S104,包括:生成包括多個所述扭曲字符的圖片;
[0033]步驟S105,包括:在所述圖片上生成至少一條干擾線得到圖片驗證碼,所述干擾線的軌跡隨機生成。
[0034]其中,步驟SlOl中,字符集優(yōu)選地為經過篩選的由數(shù)字、字母組成的字符串,中間去除了在圖片中易混淆的字符,比如I和1、6和b等。
[0035]步驟S102中,字體集包括η種字體,且每種字體具有m種字號,例如可以是:小三字號的楷體、小三字號的宋體、小三字號的圓體、三號字號的楷體、三號字號的宋體、三號字號的圓體、小四字號的楷體、小四字號的宋體、小四字號的圓體等。對于每個字符串,例如:4B69,其包括的字符為:4、B、6、9,對每個字符分別選擇一個字體和字號,例如:4選擇小三大小的楷體,B選擇三號字號的圓體、6選擇小四字號的圓體、9選擇三號字號的宋體,則每個字符的字號及字體都不同,對于不同字號不同字體的字符,人的肉眼會很容易識別,而機器由于需要提取特征進行識別,當字號不同所選用的字體不同時,其所需要針對不同字號不同的字體進行特征提取,且不同的字符所選擇的字體和字號均為隨機,機器識別的難度大大增加。
[0036]步驟S103中對字符的扭曲,則只是對字符形狀的扭曲,而不是將字符進行旋轉,由于只是對字符形狀進行的扭曲,人的肉眼仍然能夠進行識別,但對于機器來說,由于其不知道字符形狀做了什么樣的扭曲,其特征無從選擇,難度大大提高。
[0037]步驟S104中所增加的干擾線,對于肉眼來說能很好地將其與驗證碼區(qū)分,但對機器來說,所增加的干擾線會導致其對字符的識別時無法提取合適特征,從而導致識別難度增大。
[0038]本發(fā)明的干擾元素僅僅使用肉眼容易識別的干擾線、以及對字符進行扭曲而不是進行字符的旋轉,這些因素很大程度的提高了驗證碼的用戶體驗;而字符長度的不固定、干擾線軌跡的不固定、字符字體不同則增大了計算機識別驗證碼的難度,有效的保證了系統(tǒng)的安全性。
[0039]在其中一個實施例中:
[0040]還包括驗證碼參數(shù)獲取步驟,所述驗證碼參數(shù)獲取步驟包括:響應于驗證碼提供請求,根據(jù)所述驗證碼提供請求所包括的應用標識,獲取所述應用標識所對應的驗證碼參數(shù),所述驗證碼參數(shù)包括字符串的最小允許長度和最大允許長度、圖片顏色和圖片分辨率;
[0041]且所述字符串選擇步驟中,所述字符串的長度在所述最小允許長度和最大允許長度之間隨機確定;
[0042]且所述圖片預生成步驟中,所述圖片根據(jù)所述驗證碼參數(shù)所包括的圖片顏色和圖片分辨率確定。
[0043]本實施例增強了驗證碼系統(tǒng)的通用性,因為實際運用中一套驗證碼會應用于多個系統(tǒng),但是,為了更好的用戶體驗機安全性需要,不同的系統(tǒng)有時候所需要的特征參數(shù)不同,比如移動端所需要的圖片大小會根據(jù)分辨率的不同而不同,圖片的顏色會根據(jù)主題色的變化而變化,所以需要一個容易操作的配置系統(tǒng)針對不同的應用進行個性化的參數(shù)設置,從而使驗證碼系統(tǒng)可以應用與多個應用,并且參數(shù)的配置完全可以線上隨機隨時改變,增強了系統(tǒng)風控的靈活性。
[0044]本實施例中,針對不同的應用,可以預先設置不同的驗證碼參數(shù),從而控制字符串的長度、圖片顏色和圖片分辨率等。
[0045]在其中一個實施例中,所述扭曲處理包括:在每個所述渲染字符上選擇至少一個部位作為待扭曲部位,在每個所述待扭曲部位進行向上平移、向下平移、向左平移或向右平移。
[0046]本實施例中,對字符串的扭曲不是對字符的旋轉而是對字符不同部位上下、左右式的平移,優(yōu)選地,該平移為光滑平移。由于只是對字符的不同部位做平移,對于肉眼來說,仍然能夠很好地識別,但是對機器來說,由于機器一般都是進行特征識別,也