封装PHP验证码方法

时间:2023-01-17 11:13:40
/**
* 生成验证码
* @param integer $width 图片宽度
* @param integer $height 图片高度
* @param string $type 验证码类型
* @param integer $length 验证码长度
* @return string 验证码字符串
*/
function validateCode($width=100, $height=30, $type='mixed', $length=4) {
$im = imagecreatetruecolor($width, $height); // 创建画布
$white = imagecolorallocate($im, 255, 255, 255); // 分配颜色
imagefilledrectangle($im, 0, 0, $width, $height, $white); // 矩形填充
// 产生随机色
function randColor($im) {
return imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
}
switch($type) {
case 'num': // 数字型
$str = implode('', range(0, 9));
break;
case 'letter': // 字母型
$str = implode('', array_merge(range('a', 'z'), range('A', 'Z')));
break;
case 'mixed': // 混合型
$str = implode('', array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
break;
}
$str = substr(str_shuffle($str), 0, $length); // 截取
for ($i = 0; $i < $length; $i++) { // 每次写入一个字符
imagettftext($im, 18, mt_rand(-20, 20), $i*($width/$length), mt_rand($height-10, $height-5), randColor($im),'ariblk.ttf', $str[$i]); //ariblk.ttf字体文件可替换
}
for ($i = 0; $i < 100; $i++) { // 加入像素点
imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), randColor($im));
}
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
return $str;
}

可生成指定位数的数字型、字母型、混合型验证码。