999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于PHP的中文GIF動態驗證碼生成器的設計與實現

2022-12-25 21:29:06唐乾林黎現云
無線互聯科技 2022年18期

唐乾林,黎現云

(重慶電子工程職業學院,重慶 401331)

0 引言

主流驗證碼通過提供靜態的圖片,比較容易被OCR軟件識別;一些網站提供GIF動態的驗證碼圖片,使識別器不容易辨識哪一個圖層是真正的驗證碼圖片。這種方法不僅可以提供清晰的圖片,還可以更有效地防止識別器的識別。目前,比較常見的GIF動態驗證碼都是由英文字母或數字組成的,這實現起來相對簡單但安全性也相對較弱。為了提高驗證碼的安全性,就有了中文GIF動態驗證碼的提法[1]。為了網站和驗證碼的安全,為了中文GIF動態驗證碼能得到廣泛的應用,本文以代碼復用和易于維護為出發點,進行了中文GIF動態驗證碼生成器的探索與研究。

1 主要技術

要產生中文GIF動態驗證碼就必須能做到隨機生成漢字,要想能生成漢字就必須熟悉漢字的編碼及其產生方法。

1.1 生成隨機數技術

生成隨機數的方法很多,不僅可以自己編程實現,也可以復用現成的代碼。為了方便,本研究使用PHP中的mt_rand或rand函數完成隨機數的生成。rand函數默認使用libc隨機數發生器,很多老的libc的隨機數發生器具有一些不確定和未知的特性而且效率很低;mt_rand則是用了Mersenne Twister中已知的特性作為隨機數發生器,其產生隨機數值的平均速度比libc提供的rand快4倍。所以在PHP中mt_rand函數是非正式用來替換rand的[2]。

語法:

rand(min,max)

mt_rand(min,max)

min,max皆為可選,規定隨機數產生的范圍。

如果沒有提供可選參數min和max,則返回0~RAND_MAX之間的偽隨機整數。例如,想要10~1 000(包括10和1000)之間的隨機數,用rand(10,1 000)或mt_rand(10,1 000)。

1.2 漢字編碼技術

1.2.1 GB2312

GB2312標準共收錄6 763個漢字,其中一級漢字3 755個,其編碼范圍為0xB0A1~0xD7F9;二級漢字3 008個,其編碼范圍為0xD8A1~0xF7FE;同時,GB2312收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全角字符[3]。

GB2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。但對于人名、古漢語等方面出現的罕用字GB2312不能處理,這導致了后來GBK及GB18030漢字字符集的出現。

1.2.2 GBK

GBK編碼是在GB2312標準基礎上的內碼擴展規范,共收錄了21 003個漢字,完全兼容GB2312標準,支持國際標準ISO/IEC10646—1和國家標準GB13000—1中的全部中日韓漢字,并包含了BIG5編碼中的所有漢字。

GBK是采用單雙字節變長編碼,英文使用單字節編碼,完全兼容ASCII字符編碼,中文部分采用雙字節編碼,其編碼范圍為8140~FEFE,首字節在81~FE,尾字節在40~FE,剔除 xx7F一條線??傆?3 940個碼位,共收入21 886個漢字和圖形符號,其中漢字(包括部首和構件)21 003個,圖形符號883個。

1.2.3 GB18030

GB18030全稱為信息技術中文編碼字符集,是中華人民共和國國家標準所規定的變長多字節字符集。其對GB2312完全向后兼容,與GBK基本向后兼容,并支持Unicode(GB 13000)的所有碼位。GB18030共收錄漢字70 244個。

GB18030采用單字節、雙字節和四字節3種方式對字符編碼。(1)單字節部分采用GB/T 11383的編碼結構與規則,使用0x00~0x7F碼位(對應于ASCII碼的相應碼位)。(2)雙字節部分,首字節碼位從0x81至0xFE,尾字節碼位分別是0x40~0x7E和0x80~0xFE。(3)四字節部分采用GB/T 11383未采用的0x30~0x39作為對雙字節編碼擴充的后綴,這樣擴充的四字節編碼,其范圍為0x81308130~0xFE39FE39。其中,第一、第三個字節編碼碼位均為0x81~0xFE,第二、第四個字節編碼碼位均為0x30~0x39。

1.2.4 Unicode

Unicode、統一碼也叫萬國碼、單一碼是計算機科學領域里的一項業界標準,包括字符集、編碼方案等。Unicode是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式發布1.0版本,2005年3月31日發布4.1.0版本,2021年9月14日發布14.0版本。常用漢字編碼范圍為4E00~9FFF,計有20 992個。擴展漢字編碼范圍為20000~2FA1F,計有53 424個。所以,Unicode所能表示的漢字有74 416個。

1.2.5 UTF-8

UTF-8是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII相容,使得原來處理ASCII字符的軟件無須或只進行少部分修改后,便可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或傳送文字的應用中,優先采用的編碼。

Unicode只是一組字符設定或者說是從數字和字符之間的邏輯映射的概念編碼,但它并沒有指定代碼點如何在計算機上存儲。在Unicode官方資料中,Unicode的編碼方式有三種:UTF-8,UTF-16,UTF-32。由于UTF-8與字節序無關即無需BOM,同時兼容ASCII編碼,使得UTF-8編碼成為現今互聯網信息編碼標準而被廣泛使用。

2 中文驗證碼生成器的設計方案

根據漢字編碼規則及前面的分析,隨機生成的漢字,其編碼可為GB2312的一級漢字或二級漢字,也可以直接采用Unicode編碼。

生成GB2312漢字的PHP代碼如下:

function getChar($num){ // $num為生成漢字的數量

$b = '';

for ($i=0;$i<$num;$i++){

$b.=iconv('GB2312','UTF-8',chr(mt_rand(0xB0,0xD7)).chr(mt_rand(0xA1,0xF9)));

}

return $b;

}

3 使用PHP實現的中文GIF動態驗證碼生成器

根據前面的分析與設計及PHP語言,實現的中文GIF動態驗證碼生成器的主要代碼如下:

//GIF動畫類

class GIFEncoder {

var $GIF = "GIF89a";

var $VER = "GIFEncoder V2.06";

var $BUF = Array ();

var $LOP = 0;

var $DIS = 2;

var $COL = -1;

var $IMG = -1;

var $ERR = Array (

'ERR00' =>"Does not supported function for only one image!",

'ERR01' =>"Source is not a GIF image!",

'ERR02' =>"Unintelligible flag ",

'ERR03' =>"Could not make animation from animated GIF source",

);

}

//生成GIF圖片驗證

function ImageCode($string='',$width=75,$height=25){

if(empty($string)){

$len = mt_rand(4,6);

$width=16*$len;

$string=getChar($len);

}

$authstr = $string;

$board_width = $width;

$board_height = $height;

// 生成一個32幀的GIF動畫

for($i = 0;$i < 32;$i++){

ob_start();

$image = imagecreate($board_width,$board_height);

imagecolorallocate($image,0,0,0);

// 設定文字顏色數組

$colorList[] = imagecolorallocate($image,15,73,210);

$colorList[] = imagecolorallocate($image,0,64,0);

$colorList[] = imagecolorallocate($image,0,0,64);

$fontcolor = imagecolorallocate($image,0,0,0);

$gray = imagecolorallocate($image,245,245,245);

$color = imagecolorallocate($image,255,255,255);

$color2 = imagecolorallocate($image,255,0,0);

imagefill($image,0,0,$gray);

$space = 15;// 字符間距

$font=array('C:WindowsFontsmsyhbd.ttc',/*微軟雅黑*/

'C:WindowsFontsSTXINGKA.TTF',//華文行楷

'C:WindowsFontssimsun.ttc'/*宋體&新宋體*/);

if($i > 0){ // 屏蔽第一幀

$top=0;//缺失此項,致命錯誤

for ($k = 0;$k < strlen($authstr);$k++){

$colorRandom = mt_rand(0,sizeof($colorList)-1);

$float_top = rand(0,4);

$float = rand(0,3);

$size=mt_rand(13,15);//字體大小

$angle=mt_rand(0,30);//角度制表示的角度

imagettftext($image,$size,$angle,$space*$k,$top+$float_top+15,$colorList[$colorRandom],$font[mt_rand(0,count($font)-1)],mb_substr($authstr,$k,1));//支持中文

}

}

for ($k = 0;$k < 20;$k++){

$colorRandom = mt_rand(0,sizeof($colorList)-1);

imagesetpixel($image,rand()%70,rand()%15,$colorList[$colorRandom]);

}

// 添加干擾線

$gif = new GIFEncoder($imagedata);

header('Content-type:image/gif');

echo $gif->GetAnimation();

}

4 測試中文GIF動態驗證碼生成器

前面使用PHP語言實現了中文驗證碼生成器,那么這個生成器能生成中文驗證碼,可以編寫如下的簡單代碼進行測試。

//調用示例

if(isset($_GET["getcode"])&& $_GET["getcode"]==1){

session_start();

$len = mt_rand(4,6);//生成驗證碼位數:4-6位的變長驗證碼

$w=16*$len;//計算顯示驗證碼的寬度

$_SESSION['timestamp'.session_id()] = time();//設置有效時間

$randCode=getChar($len);//獲得驗證碼

$_SESSION['code'.session_id()]=$randCode;//記錄驗證碼

ImageCode($randCode,$w);//顯示GIF動畫

exit();

}

//驗證示例

if(isset($_POST['gettxt']))

{

session_start();

exit($_SESSION['code'.session_id()]);

}

//HTML頁面調用示例

?>

中文GIF動態驗證碼


經過反復運行上述代碼,都可以在終端看到隨機生成的有漢字動態顯示的GIF動畫,也可以獲得當前的中文驗證碼(見圖1),說明上述生成器沒有問題,可以投入實際項目使用。

5 結語

實踐證明,本文的中文GIF動態驗證碼生成器是可行的、可用的??梢愿鶕枰x用一級漢字或者二級漢字,在簡單的輸入驗證中,也是比較安全高效的。若選用Unicode編碼,則有可能出現生僻字,從而使輸入的難度增加,但可以改造成點擊驗證,從而可以進一步完善此中文驗證碼生成器。

主站蜘蛛池模板: 狂欢视频在线观看不卡| 色哟哟国产精品| 久久久久人妻一区精品| 久久久久无码国产精品不卡| 亚洲欧美日韩成人在线| 最新无码专区超级碰碰碰| 亚洲天堂首页| 久久先锋资源| 无码av免费不卡在线观看| 91精品久久久久久无码人妻| 国内精品久久久久久久久久影视| A级全黄试看30分钟小视频| 亚洲视屏在线观看| 一级在线毛片| 日韩乱码免费一区二区三区| 国产亚洲精| 视频二区欧美| 日韩经典精品无码一区二区| 久久久国产精品免费视频| 在线观看国产精品第一区免费| 国产69精品久久久久孕妇大杂乱 | 精品国产成人国产在线| 国产成人精品免费视频大全五级| 精品国产毛片| 一本大道东京热无码av| 日本少妇又色又爽又高潮| 欧美伊人色综合久久天天| 色欲综合久久中文字幕网| 亚洲黄色激情网站| 欧美精品xx| 亚洲人人视频| 国产杨幂丝袜av在线播放| 广东一级毛片| 国产99在线| 国产成人凹凸视频在线| 91av国产在线| 亚洲日韩图片专区第1页| 欧美激情视频在线观看一区| 国产99在线观看| 91久久大香线蕉| 福利在线一区| 中文字幕色站| 91麻豆国产在线| 在线毛片网站| 亚洲色图欧美一区| 成人免费视频一区| 国产青青草视频| 67194在线午夜亚洲| 日本人又色又爽的视频| 久久天天躁狠狠躁夜夜躁| 国产高清在线丝袜精品一区| 日韩成人免费网站| 人妖无码第一页| 婷婷六月综合| 亚洲天堂久久久| 五月丁香在线视频| 中国成人在线视频| 熟妇人妻无乱码中文字幕真矢织江 | 久久五月天国产自| 小13箩利洗澡无码视频免费网站| 日本一区二区三区精品国产| 99视频在线观看免费| 国产91麻豆免费观看| 亚洲综合欧美在线一区在线播放| 国产极品嫩模在线观看91| 狠狠操夜夜爽| 日韩精品久久久久久久电影蜜臀| 国产无码性爱一区二区三区| 亚洲综合经典在线一区二区| 本亚洲精品网站| 欧美一级在线| 大陆国产精品视频| 国产在线观看91精品亚瑟| 国产人人乐人人爱| 不卡无码网| 制服丝袜无码每日更新| 欧美精品H在线播放| 九九热精品免费视频| 91九色视频网| 国产精品亚洲va在线观看 | 又爽又大又光又色的午夜视频| 亚洲综合激情另类专区|