<?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, $heigth - 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, $heigth - 1), $color);
}
}
header("content-type:image/gif");
imagegif($image);
imagedestroy($image);
}
主要要点:1、如果前面没有申明session_start();则需要申明;2、字体可以在cmf输入fonts下载到自己定义的fonts文件夹;3、$_SESSION [$sess_name]可以通过$_POST获得用户输入的验证码进行比较。