代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
//驗證碼類 class validatecode { private $charset = 'abcdefghkmnprstuvwxyzabcdefghkmnprstuvwxyz23456789' ; //隨機因子 private $code ; //驗證碼 private $codelen = 4; //驗證碼長度 private $width = 130; //寬度 private $height = 50; //高度 private $img ; //圖形資源句柄 private $font ; //指定的字體 private $fontsize = 20; //指定字體大小 private $fontcolor ; //指定字體顏色 //構造方法初始化 public function __construct() { $this ->font = dirname( __file__ ). '/font/elephant.ttf' ; //注意字體路徑要寫對,否則顯示不了圖片 } //生成隨機碼 private function createcode() { $_len = strlen ( $this ->charset)-1; for ( $i =0; $i < $this ->codelen; $i ++) { $this ->code .= $this ->charset[mt_rand(0, $_len )]; } } //生成背景 private function createbg() { $this ->img = imagecreatetruecolor( $this ->width, $this ->height); $color = imagecolorallocate( $this ->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255)); imagefilledrectangle( $this ->img,0, $this ->height, $this ->width,0, $color ); } //生成文字 private function createfont() { $_x = $this ->width / $this ->codelen; for ( $i =0; $i < $this ->codelen; $i ++) { $this ->fontcolor = imagecolorallocate( $this ->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); imagettftext( $this ->img, $this ->fontsize,mt_rand(-30,30), $_x * $i +mt_rand(1,5), $this ->height / 1.4, $this ->fontcolor, $this ->font, $this ->code[ $i ]); } } //生成線條、雪花 private function createline() { //線條 for ( $i =0; $i <6; $i ++) { $color = imagecolorallocate( $this ->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); imageline( $this ->img,mt_rand(0, $this ->width),mt_rand(0, $this ->height),mt_rand(0, $this ->width),mt_rand(0, $this ->height), $color ); } //雪花 for ( $i =0; $i <100; $i ++) { $color = imagecolorallocate( $this ->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagestring( $this ->img,mt_rand(1,5),mt_rand(0, $this ->width),mt_rand(0, $this ->height), '*' , $color ); } } //輸出 private function output() { header( 'content-type:image/png' ); imagepng( $this ->img); imagedestroy( $this ->img); } //對外生成 public function doimg() { $this ->createbg(); $this ->createcode(); $this ->createline(); $this ->createfont(); $this ->output(); } //獲取驗證碼 public function getcode() { return strtolower ( $this ->code); } } |
使用方法:
1、先把驗證碼類保存為一個名為 validatecode.class.php 的文件;
2、新建一個名為 captcha.php 的文件進行調用該類;
captcha.php
3、引用到頁面中,代碼如下:
4、一個完整的驗證頁面,代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?php session_start(); //在頁首先要開啟session, //error_reporting(2047); session_destroy(); //將session去掉,以每次都能取新的session值; //用seesion 效果不錯,也很方便 ?> <html> <head> <title>session 圖片驗證實例</title> <style type= "text/css" > #login p{ margin-top: 15px; line-height: 20px; font-size: 14px; font-weight: bold; } #login img{ cursor:pointer; } form{ margin-left:20px; } </style> </head> <body> <form id= "login" action= "" method= "post" > <p>此例為session驗證實例</p> <p> <span>驗證碼:</span> <input type= "text" name= "validate" value= "" size=10> <img title= "點擊刷新" src= "./captcha.php" align= "absbottom" onclick= "this.src='captcha.php?'+math.random();" ></img> </p> <p> <input type= "submit" > </p> </form> <?php //打印上一個session; //echo "上一個session:<b>".$_session["authnum_session"]."</b><br>"; $validate = "" ; if (isset( $_post [ "validate" ])){ $validate = $_post [ "validate" ]; echo "您剛才輸入的是:" . $_post [ "validate" ]. "<br>狀態:" ; if ( $validate != $_session [ "authnum_session" ]){ //判斷session值與用戶輸入的驗證碼是否一致; echo "<font color=red>輸入有誤</font>" ; } else { echo "<font color=green>通過驗證</font>" ; } } ?> |
總結
以上所述是小編給大家介紹的php驗證碼類文件及調用方式代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.cnblogs.com/jly144000/p/7487225.html