php實現(xiàn)漢字驗證碼和算式驗證碼的方法
來源:易賢網(wǎng) 閱讀:781 次 日期:2015-03-09 16:45:34
溫馨提示:易賢網(wǎng)小編為您整理了“php實現(xiàn)漢字驗證碼和算式驗證碼的方法”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了php實現(xiàn)漢字驗證碼和算式驗證碼的方法,實例分析了算式驗證碼及中文漢字驗證碼的實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了php實現(xiàn)漢字驗證碼和算式驗證碼的方法。分享給大家供大家參考。具體分析如下:

大家知道簡單數(shù)字或者字母驗證碼很容易被破解,但是算式驗證碼或者中文漢字驗證碼不容易被破解,

所以建議大家在使用驗證碼的時候,盡量用算式驗證碼或者中文漢字驗證碼。

下面是我寫的兩種驗證碼代碼,有用到的朋友可以參考下:

1.算式驗證碼:

代碼如下:

<?php

session_start();

header("Content-type: image/png");

$num1 = mt_rand(0,9);//第一位數(shù)

$num2 = mt_rand(1,9);//第二位數(shù)

$type_str = "+-*";//方法字符串集合

$type = substr($type_str,rand(0,2),1);//隨機方法

$change = mt_rand(1,3);

if($change==1){

$code = "$num1$type$num2=?";

$result = "\$verifyCode=$num1$type$num2;";

eval($result);

$_SESSION['authnum_session'] = $verifyCode;

}elseif($change==2){

$result = "\$verifyCode=$num1$type$num2;";

eval($result);

$code = $num1.$type."_=".$verifyCode;

$_SESSION['authnum_session'] = $num2;

}elseif($change==3){

$result = "\$verifyCode=$num1$type$num2;";

eval($result);

$code = "_".$type.$num2."=".$verifyCode;

$_SESSION['authnum_session'] = $num1;

}

$im = imagecreate(68,28);

$black = imagecolorallocate($im, 0,0,0);

$white = imagecolorallocate($im, 255,255,255);

$gray = imagecolorallocate($im, 200,200,200);

$red = imagecolorallocate($im, 255, 0, 0);

imagefill($im,0,0,$white);

imagestring($im, 5, 10, 8, $code, $black);

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

imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $black);

imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $red);

imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $gray);

}

imagepng($im);

imagedestroy($im);

?>

2.中文漢字驗證碼:

代碼如下:

<?php

session_start();

$ch_str="的一是在了不和有大這主中人上為們地個用工時要動國產(chǎn)以我到他會作來分生對于學下級就年階義發(fā)成部民可出能方進同行面說種過命度革而多子后自社加小機也經(jīng)力線本電高量長黨得實家定深法表著水理化爭現(xiàn)所二起政三好十戰(zhàn)無農使性前等反體合斗路圖把結第里正新開論之物從當兩些還天資事隊批如應形想制心樣干都向變關點育重其思與間內去因件日利相由壓員氣業(yè)代全組數(shù)果期導平各基或月毛然問比展那它最及外沒看治提五解系林者米群頭意只明四道馬認次文通但條較克又公孔領軍流入接席位情運器并飛原油放立題質指建區(qū)驗活眾很教決特此常石強極土少已根共直團統(tǒng)式轉別造切九你取西持總料連任志觀調七么山程百報更見必真保熱委手改管處己將修支識病象幾先老光專什六型具示復安帶每東增則完風回南廣勞輪科北打積車計給節(jié)做務被整聯(lián)步類集號列溫裝即毫知軸研單色堅據(jù)速防史拉世設達爾場織歷花受求傳口斷況采精金界品判參層止邊清至萬確究書術狀廠須離再目海交權且兒青才證低越際八試規(guī)斯近注辦布門鐵需走議縣兵固除般引齒千勝細影濟白格效置推空配刀葉率述今選養(yǎng)德話查差半敵始片施響收華覺備名紅續(xù)均藥標記難存測士身緊液派準斤角降維板許破述技消底床田勢端感往神便賀村構照容非搞亞磨族火段算適講按值美態(tài)黃易彪服早班麥削信排臺聲該擊素張密害侯草何樹肥繼右屬市嚴徑螺檢左頁抗蘇顯苦英快稱壞移約巴材省黑武培著河帝僅針怎植京助升王眼她抓含苗副雜普談圍食射源例致酸舊卻充足短劃劑宣環(huán)落首尺波承粉踐府魚隨考刻靠夠滿夫失包住促枝局菌桿周護巖師舉曲春元超負砂封換太模貧減陽揚江析畝木言球朝醫(yī)校古呢稻宋聽唯輸滑站另衛(wèi)字鼓剛寫劉微略范供阿塊某功套友限項余倒卷創(chuàng)律雨讓骨遠幫初皮播優(yōu)占死毒圈偉季訓控激找叫云互跟裂糧粒母練塞鋼頂策雙留誤礎吸阻故寸盾晚絲女散焊功株親院冷徹彈錯散商視藝滅版烈零室輕血倍缺厘泵察絕富城沖噴壤簡否柱李望盤磁雄似困鞏益洲脫投送奴側潤蓋揮距觸星松送獲興獨官混紀依未突架寬冬章濕偏紋吃執(zhí)閥礦寨責熟穩(wěn)奪硬價努翻奇甲預職評讀背協(xié)損棉侵灰雖矛厚羅泥辟告卵箱掌氧恩愛停曾溶營終綱孟錢待盡俄縮沙退陳討奮械載胞幼哪剝迫旋征槽倒握擔仍呀鮮吧卡粗介鉆逐弱腳怕鹽末陰豐編印蜂急拿擴傷飛露核緣游振操央伍域甚迅輝異序免紙夜鄉(xiāng)久隸缸夾念蘭映溝乙嗎儒殺汽磷艱晶插埃燃歡鐵補咱芽永瓦傾陣碳演威附牙芽永瓦斜灌歐獻順豬洋腐請透司危括脈宜笑若尾束壯暴企菜穗楚漢愈綠拖牛份染既秋遍鍛玉夏療尖殖井費州訪吹榮銅沿替滾客召旱悟刺腦措貫藏敢令隙爐殼硫煤迎鑄粘探臨薄旬善??v擇禮愿伏殘雷延煙句純漸耕跑澤慢栽魯赤繁境潮橫掉錐希池敗船假亮謂托伙哲懷割擺貢呈勁財儀沉煉麻罪祖息車穿貨銷齊鼠抽畫飼龍庫守筑房歌寒喜哥洗蝕廢納腹乎錄鏡婦惡脂莊擦險贊鐘搖典柄辯竹谷賣亂虛橋奧伯趕垂途額壁網(wǎng)截野遺靜謀弄掛課鎮(zhèn)妄盛耐援扎慮鍵歸符慶聚繞摩忙舞遇索顧膠羊湖釘仁音跡碎伸燈避泛亡答勇頻皇柳哈揭甘諾概憲濃島襲誰洪謝炮澆斑訊懂靈蛋閉孩釋乳巨徒私銀伊景坦累勻霉杜樂勒隔彎績招紹胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗堿殊崗挖氏刃劇堆赫荷胸衡勤膜篇登駐案刊秧緩凸役剪川雪鏈漁啦臉戶洛孢勃盟買楊宗焦賽旗濾硅炭股坐蒸凝竟陷槍黎救冒暗洞犯筒您宋弧爆謬涂味津臂障褐陸啊健尊豆拔莫抵桑坡縫警挑污冰柬嘴啥飯塑寄趙喊墊康遵牧遭幅園腔訂香肉弟屋敏恢忘衣孫齡嶺騙休借丹渡耳刨虎筆稀昆浪薩茶滴淺擁穴覆倫娘噸浸袖珠雌媽紫戲塔錘震歲貌潔剖牢鋒疑霸閃埔猛訴刷狠忽災鬧喬唐漏聞沈熔氯荒莖男凡搶像漿旁玻亦忠唱蒙予紛捕鎖尤乘烏智淡允叛畜俘摸銹掃畢璃寶芯爺鑒秘凈蔣鈣肩騰枯拋軌堂拌爸循誘祝勵肯酒繩窮塘燥泡袋朗喂鋁軟渠顆慣貿糞綜墻趨彼屆墨礙啟逆卸航霧冠丙街萊貝輻腸付吉滲瑞驚頓擠秒懸姆爛森糖圣凹陶詞遲蠶億矩";

$len = mb_strlen($ch_str,"utf-8");//漢字長度

$str = array();

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

$pos = mt_rand(0,$len-5);//開始位置

$str[] = mb_substr($ch_str,$pos,1,"utf-8");

}

$authnum_session = implode("",$str);

$_SESSION['authnum_session'] = $authnum_session; //記錄到session

Header("Content-type: image/PNG");

//圖片的長和高

$image_x=100;

$image_y=50;

$im = imagecreate($image_x,$image_y);

//這里取圖片底色為白色

$bkg = ImageColorAllocate($im,255,255,255);

//顯示的字體樣式,這個要把文件放到對應的目錄中,如果你沒有文件就去window的字體文件中找一個吧。

$fnt = "simhei.ttf";

//為圖像分配一些顏色

$white=ImageColorAllocate($im,234,185,95);

//在圖片上畫橢圓弧,指定下坐標點

imagearc($im, 150, 8, 20, 20, 75, 170, $white);

imagearc($im, 180, 7,50, 30, 75, 175, $white);

//在圖片上畫一條線段,指定下坐標點

imageline($im,20,20,180,30,$white);

imageline($im,20,18,170,50,$white);

imageline($im,25,50,80,50,$white);

//亂點的數(shù)量

$noise_num=3000;

$line_num=50;

//各種混亂字符的顏色

$rectangle_color=imagecolorallocate($im,0xAA,0xAA,0xAA);

$noise_color=imagecolorallocate($im,0x00,0x00,0x00);

$font_color=imagecolorallocate($im,0x00,0x00,0x00);

for($i=0;$i<$noise_num;$i++)

{

//在一個坐標點上畫一個單一像素,這個點上面定義了,是黑色的。

//imagesetpixel($im,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color);

}

for($i=0;$i<$line_num;$i++)

{

$line_color=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

//在兩個坐標點間畫一條線,顏色在上面定義

imageline($im,mt_rand(0,$image_x),mt_rand(0,$image_y),mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color);

}

for ($i=0;$i<4;$i++)

{

ImageTTFText($im, rand(18,20), rand(0,20), rand(($image_x/4)*$i+$image_x/100,($image_x/4)*$i+$image_x/8), rand($image_y/2+$image_y/10,$image_y/2+$image_y/5), $font_color, $fnt, $str[$i]);

}

ImagePNG($im);

ImageDestroy($im);

?>

字體文件:simhei.rar點擊此處本站下載。

注意:

中文漢字驗證碼單獨執(zhí)行,然后獲取session會發(fā)現(xiàn)驗證碼和session內容不一致。但是在img 標簽中src屬性中引用這個中文漢字驗證碼文件時,然后獲取session,這時兩者內容時一致的。

感興趣的朋友可以對此進一步加以完善。

希望本文所述對大家的php程序設計有所幫助。

更多信息請查看IT技術專欄

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:php實現(xiàn)漢字驗證碼和算式驗證碼的方法

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)