PHP生成随机验证码
源代码:
<?php
// $img_w 图片宽
// $img_h 图片高
// $char_len 验证码字符数
// $font 字体大小(内置字体1-5)
// $px 随机干扰像素点
// $line 随机线条数
function getCode($img_w=100,$img_h=40,$char_len=5,$font=5,$px=80,$line=10){
//生成码值数组,不需要0,避免与字母o冲突
$char = array_merge(range("A","Z"),range("a","z"),range("1","9"));
//随机获取$char_len个码值的键
$rand_keys = array_rand($char,$char_len);
//判断当码值长度为1时,将其放入数组中
if($char_len == 1){
$rand_keys = array($rand_keys);
}
//打乱随机获取的码值键的数组
shuffle($rand_keys);
//根据键获取对应的码值,并拼接成字符串
$code='';
foreach($rand_keys as $i){
$code = $code . $char[$i];
}
//----1 生成画布
$img = imageCreateTrueColor($img_w,$img_h);
//设置背景
$bg_color = imageColorAllocate($img,0xcc,0xcc,0xcc);
imageFill($img,0,0,$bg_color);
//干扰像素
for($i=0;$i<=$px;$i++){
$color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageSetPixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
}
for($i=0;$i<=$line;$i++){
$color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($img,mt_rand(0,$img_w),mt_rand(0,$img_h),mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
}
//矩形边框
$rect_color = imageColorAllocate($img,0x90,0x90,0x90);
imageRectangle($img,0,0,$img_w-1,$img_h-1,$rect_color);
//----2 操作画布
//设定字符串颜色
$str_color = imageColorAllocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
//设定字符串位置
$font_w = imageFontWidth($font);
$font_h = imageFontHeight($font);
$str_w = $font_w * $char_len;
imageString($img,$font,($img_w-$str_w)/2,($img_h-$font_h)/2,$code,$str_color);
$resulf = array(
"code" => $code,
"img" => $img
);
return $resulf;
}
// $res['code'] 验证码
// $res['img'] 图片
$res = getCode();
session_start();
$_SESSION['captcha_code'] = $res['code'];
header("Content-Type: image/png");
imagepng($res['img']);
imagedestroy($res['img']);
?>
评论 (0)