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