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