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
69
70
71
|
<?php
require_once 'string.func.php' ;
//通过GD库做验证码
/**
*添加验证文字
* @param int $type
* @param int $length
*/
function buildRandomString( $type =1, $length =4){
$row = '' ;
if ( $type ==1){
$row =join( '' ,range(0, 9));
} else if ( $type ==2){
$row =join( '' , array_merge (range( 'a' , 'z' ),range( 'A' , 'Z' )));
} else if ( $type ==3){
$row =join( '' , array_merge (range( 'a' , 'z' ),range( 'A' , 'Z' ),range(0, 9)));
};
$row = str_shuffle ( $row );
$row = substr ( $row ,0, $length );
return $row ;
}
/**
* 生成缩略图
* @param int $type //包含数字或者英文
* @param int $length 多少个字符
* @param int $pixel 干扰小点的密度
* @param int $dst_h 干扰线的密度
* @param string //验证码在$_SESSION中的名字
*/
function verifyImage( $type =1, $length =4, $pixel =0, $line =0, $sess_name = "verify" ){
//session_start();
//创建画布
$width = 100;
$height = 40;
$image = imagecreatetruecolor ( $width , $height );
$white = imagecolorallocate ( $image , 255, 255, 255 );
$black = imagecolorallocate ( $image , 0, 0, 0 );
//用填充矩形填充画布
imagefilledrectangle ( $image , 1, 1, $width - 2, $height - 2, $white );
$chars = buildRandomString ( $type , $length );
$_SESSION [ $sess_name ] = $chars ;
//$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );
$fontfiles = array ( "SIMKAI.TTF" );
//由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体
for ( $i = 0; $i < $length ; $i ++) {
$size = mt_rand ( 14, 18 );
$angle = mt_rand ( - 15, 15 );
$x = 5 + $i * $size ;
$y = mt_rand ( 20, 26 );
$fontfile = "../fonts/" . $fontfiles [mt_rand ( 0, count ( $fontfiles ) - 1 )];
$color = imagecolorallocate ( $image , mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
$text = substr ( $chars , $i , 1 );
imagettftext ( $image , $size , $angle , $x , $y , $color , $fontfile , $text );
}
if ( $pixel ) {
for ( $i = 0; $i < 50; $i ++) {
imagesetpixel ( $image , mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );
}
}
if ( $line ) {
for ( $i = 1; $i < $line ; $i ++) {
$color = imagecolorallocate ( $image , mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
imageline ( $image , mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $color );
}
}
header ( "content-type:image/gif" );
imagegif ( $image );
imagedestroy ( $image );
}
|
主要要点:
1、如果前面没有申明session_start();则需要申明;
2、字体可以在cmf输入fonts下载到自己定义的fonts文件夹;
3、$_SESSION [$sess_name]可以通过$_POST获得用户输入的验证码进行比较。