-
<!DOCTYPE html>
<html>
? <head>
? ? <meta charset="utf-8" />
<title>確認(rèn)驗(yàn)證碼</title>
? ?</head>
<?php
? ?
? if(isset($_REQUEST['authcode'])){
? ? ?session_start();
?if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
?echo '<font color="#0000CC">輸入正確</font>';
?}else{
? ?echo '<font color="#CC0000"><b>輸入錯(cuò)誤<b></font>';
?}
?exit();
? }
? ?>
<!--php代碼還是放在head和body之間方便-->
<!--基本沒啥好說的這幾個(gè)表單直接替換“captcha.php”這些關(guān)鍵位置就可以了,另外就是畫布的長寬
另外這里:document.getElementById('captcha_cn').src='./captcha_cn.php?r='+Math.random()的拼接規(guī)則注意一下-->
? ?<body>
? ? ?<form ?method="post" action="./form.php">
? 驗(yàn)證碼圖片:<img id="captcha_cn" ?src="./captcha_cn.php?r=<?php echo rand();?>" width=200 height=60>
? <a href="javascript:void(0)" onclick="document.getElementById('captcha_cn').src='./captcha_cn.php?r='+Math.random()">換一個(gè)?</a>
??
? <p>請輸入圖片內(nèi)容:<input type="text" name="authcode" value="" placeholder="請輸入圖片中的內(nèi)容"/></p>
? <p><input type="submit" value="提交" ></p>
?</form>
</body>
</html>
? ?
查看全部 -
<?php
? ??
session_start();
? ? $table=array(
'pic0'=>'鳥',
'pic1'=>'貓',
'pic2'=>'狗',
'pic3'=>'魚'
) ;
$index=mt_rand(0,3);
$value=$table['pic'.$index];
$_SESSION['authcode']=$value;
//$filename=dirname(__FILE__).'\\pic'.$index.'jpg';
$filename=dirname(__FILE__).'\\pic'.$index.'.jpg';//__FILE__這里兩條下劃線不要忘了,相鄰的兩個(gè)“.”差點(diǎn)搞死我
? ? $contents=file_get_contents($filename);
//header('content-type:image/jpg');//輸出內(nèi)容前??
echo $contents;
//end
imagedestroy();
查看全部 -
無字典版
<?php
? ??
session_start();
$image =imagecreatetruecolor(200,60);
$bgcolor=imagecolorallocate($image,255,255,255);//#ffffff
? ? ?imagefill($image,0,0,$bgcolor);
$fontface='simfang.ttf';//這里我用仿宋
$strdb=array('慕','課','網(wǎng)','贊');
?
//1.畫數(shù)字(字典)
$captcha_code='';
for($i=0;$i<4;$i++){
$fontcolor = imagecolorallocate($image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
$cn=$strdb[$i];
$captcha_code.=$cn;
?
imagettftext($image,mt_rand(20,24),mt_rand(-60,60),($i*50+10),mt_rand(35,40),$fontcolor,$fontface,$cn);
}//錯(cuò)誤:這里之前少了一個(gè)參數(shù)“字體大小”;字體大小是20-24,所以i=0的時(shí)候X的值太小的話有可能沒邊,要考慮到。
$_SESSION['authcode']=$captcha_code;
//2.畫干擾點(diǎn)
for($i=0;$i<200;$i++){
$pointcolor=imagecolorallocate($image,mt_rand(50,200),mt_rand(50,100),mt_rand(50,200));
imagesetpixel($image,mt_rand(1,199),mt_rand(1,59),$pointcolor);
}
?
//3.畫干擾線
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220));
imageline($image,mt_rand(1,199),mt_rand(1,59),mt_rand(1,199),mt_rand(1,59),$linecolor);
}
header('content-type:image/png');
imagepng($image);
//end
imagedestroy();
查看全部 -
<?php
session_start();
$image =imagecreatetruecolor(200,60);
$bgcolor=imagecolorallocate($image,255,255,255);//#ffffff
? ? ?imagefill($image,0,0,$bgcolor);
$fontface='simfang.ttf';//這里我用仿宋
$str="的一了是我不在人們有來他這上著個(gè)地到大里說去子得也和那要下看天時(shí)過出小么起你都把好還多沒為又可家學(xué)只以主會(huì)樣年想能生同老中從自面前頭到它后然走很像見兩用她國動(dòng)進(jìn)成回什邊作對開而已些現(xiàn)山民候經(jīng)發(fā)工向事命給長水幾義三聲于高正媽手知理眼志點(diǎn)心戰(zhàn)二問但身方實(shí)吃做叫當(dāng)住聽革打呢真黨全才四已所敵之最光產(chǎn)情路分總條白話東席次親如被花口放兒常西氣五第使寫軍吧文運(yùn)在果怎定許快明行因別飛外樹物活部門無往船望新帶隊(duì)先力完間卻站代員機(jī)更九您每風(fēng)級(jí)跟笑啊孩萬少直意夜比階連車重便斗馬哪化太指變社似士者干石滿決百原拿群究各六本思解立河爸村八難早論嗎根共讓相研今其書坐接應(yīng)關(guān)信覺死步反處記將千找爭領(lǐng)或師結(jié)塊跑誰草越字加腳緊愛等習(xí)陣怕月青半火法題建趕位唱海七女任件感準(zhǔn)張團(tuán)屋爺離色臉片科倒睛利世病剛且由送切星晚表夠整認(rèn)響雪流未場該并底深刻平偉忙提確近亮輕講農(nóng)古黑告界拉名呀土清陽照辦史改歷轉(zhuǎn)畫造嘴此治北必服雨穿父內(nèi)識(shí)驗(yàn)傳業(yè)菜爬睡興";//這里字間不能有空格,有在外面刪掉再拿進(jìn)來,注意視圖切自動(dòng)換行
$strdb=str_split($str,3);
/* header('content-type:text/html;charset=utf-8');
var_dump($strdb);//這種打印并中斷的方法很實(shí)用,要注意
die();//少一個(gè)分號(hào)都能把自己給搞蒙??! */
//1.畫數(shù)字(字典)
$captcha_code='';
for($i=0;$i<4;$i++){
$fontcolor = imagecolorallocate($image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
$index=mt_rand(0,count($strdb)-1);
$cn=$strdb[$index];
$captcha_code.=$cn;
imagettftext($image,mt_rand(20,24),mt_rand(-60,60),($i*50+10),mt_rand(35,40),$fontcolor,$fontface,$cn);
}//錯(cuò)誤:這里之前少了一個(gè)參數(shù)“字體大小”;字體大小是20-24,所以i=0的時(shí)候X的值太小的話有可能沒邊,要考慮到。
$_SESSION['authcode']=$captcha_code;
//2.畫干擾點(diǎn)
for($i=0;$i<200;$i++){
$pointcolor=imagecolorallocate($image,mt_rand(50,200),mt_rand(50,100),mt_rand(50,200));
imagesetpixel($image,mt_rand(1,199),mt_rand(1,59),$pointcolor);
}
//3.畫干擾線
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220));
imageline($image,mt_rand(1,199),mt_rand(1,59),mt_rand(1,199),mt_rand(1,59),$linecolor);
}
header('content-type:image/png');
imagepng($image);
//end
imagedestroy();
查看全部 -
session_start(); header('content-type:text/html;charset=utf-8'); // 定義字符集路徑 $fontface = "SIMYOU.TTF"; // 定義字符庫 $str = ?"中文字庫"; // 如果字符必須保證為 UTF-8 編碼格式, 如果不是,需要將其轉(zhuǎn)換UTF-8 編碼 // iconv ( string $in_charset , string $out_charset , string $str ) 將 $in_charset 編碼的 $str 字符串按要求的 $out_charset 字符編碼來轉(zhuǎn)換 并返回 // $str = iconv("GBK", "UTF-8", $text); // 將字符庫中的字符截取成數(shù)組 // str_split(string,length) 把字符串分割到數(shù)組中。string 要分割的字符串。length 每個(gè)數(shù)組元素的長度。默認(rèn)是 1。 // 因?yàn)?utf-8 編碼的字符 是三個(gè)字節(jié)一個(gè)漢字,所以 length = 3. $strdb = str_split($str,3); for ($i=0; $i < 4; $i++) { // 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); $index = rand(0,count($strdb)-1); $cn = $strdb[$index]; $captch .=$cn; // imagettftext ( 畫布資源 , 字體大小 , 傾斜角度 , X軸位置 , Y軸位置 , 字體顏色 , 字符集路徑 , 文字內(nèi)容 ) ? ? 圖像寫入文本 imagettftext($image, rand(14,18), mt_rand(-60,60), (40*$i+20), mt_rand(30,35), $fontcolor, $fontface, $cn); } // 保存驗(yàn)證碼,并全部轉(zhuǎn)換在小寫 $_SESSION['authcode'] = strtolower($captch);
查看全部 -
header("content-type:text/html;charset=utf-8");代表瀏覽器輸出文本類型
查看全部 -
在form_xxx.php 中 或者將 php代碼 包含到 <body> 中,或者在 php代碼最前面加上 header('content-type:text/html;charset=utf-8'); 這樣瀏覽器才能正確處理 $_SESSION['authcode'] 和 $_REQUEST['authcode']中可能出現(xiàn)的漢字 captch_img.php 中的代碼: session_start(); //開啟 session 功能 $table = array( //制作 驗(yàn)證圖 驗(yàn)證碼 對照表 'pic0'=>'貓', 'pic1'=>'狗', 'pic2'=>'蛇', 'pic3'=>'馬' ); $index = rand(0,3); //生成隨機(jī)數(shù) $value = $table['pic'.$index]; //獲取對應(yīng)驗(yàn)證碼 $_SESSION['authcode'] = $value; //保存驗(yàn)證碼 $filename = dirname(__FILE__).'\\pic'.$index.'.jpg'; //獲取驗(yàn)證圖文件路徑 $contents = file_get_contents($filename); //獲取驗(yàn)證圖內(nèi)容 header('content-type:image/jpg'); //填寫報(bào)頭 echo $contents; //輸出驗(yàn)證圖
查看全部 -
動(dòng)圖更換驗(yàn)證碼通過javascript修改 src地址,通過改變傳入的參數(shù),從而刷新驗(yàn)證碼 <a href = "javascript:void(0)" onclick = "document.getElementById('captcha_img').src = './captcha.php?r='+Math.random()">換一個(gè)?</a>
查看全部 -
strtolower()將字符串轉(zhuǎn)為小寫
查看全部 -
if(isset($_REQUEST['authcode'])){ session_start(); if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){ echo '<font color="#0000CC">輸入正確</font>'; }else{ echo '<font color="#CC0000"> <b>輸入錯(cuò)誤</b> </font>'; } exit(); }
查看全部 -
多服務(wù)器情況,需考慮session集中管理
查看全部 -
// 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
substr()截取字符串的函數(shù)
$data=join("",array_merge(range('a','z'),range('A','Z'),range(1,9))); 數(shù)字字典可以直接使用 jion 自定義范圍添加
查看全部 -
增加干擾元素
查看全部 -
<?php /*php之驗(yàn)證制作*/ //1、創(chuàng)建一個(gè)真空彩色圖像 $image=imagecreatetruecolor(100,30); //2、為圖像分配顏色 $bgcolor=imagecolorallocate($image,255,255,255); //3、填充圖像 imagefill($image,0,0,$bgcolor); //4、在圖像中添加隨機(jī)數(shù)字 $code=''; $content=''; for($i=0;$i<4;$i++){ $fontsize=20; $code=rand(0,9); $fontcolor=imagecolorallocate($image,0,0,0); $x=$i*(100/4)+rand(5,10); $y=rand(5,15); $content.=$code; imagestring($image,$fontsize,$x,$y,$code,$fontcolor); } //增加干擾元素 for($i=0;$i<400;$i++){ $pointcolor=imagecolorallocate($image,rand(0,200),rand(0,200),rand(0,200)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); } session_start(); $_SESSION["content"]=$content; header('content-type:image/png'); imagepng($image); imagedestroy($image);
查看全部
舉報(bào)