PHP实现验证码

<?php
Header("Content-type: image/png");
/*
* 初始化
*/
$border = true;         //是否要边框 
$digits = 4;            //验证码位数
$width = $digits*15;    //图片宽度
$height = 30;           //图片高度
$fontsize = 5;          //字体大小
$alpha = "abcdefghijkmnopqrstuvwxyz";   //验证码内容1:字母
$number = "023456789";                  //验证码内容2:数字
$randcode = "";                         //验证码字符串初始化
srand((double)microtime()*1000000); //初始化随机数种子
$im = ImageCreate($width, $height); //创建验证图片
/*
* 绘制基本框架
*/
$bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
ImageFill($im, 0, 0, $bgcolor);                     //填充背景色
if($border)
{
    $black = ImageColorAllocate($im, 0, 0, 0);              //设置边框颜色
    ImageRectangle($im, 0, 0, $width-1, $height-1, $black);//绘制边框
}
/*
* 逐位产生随机字符
*/
for($i=0; $i<$digits; $i++)
{   
    $alpha_or_number = mt_rand(0, 1);       //字母还是数字
    $str = $alpha_or_number ? $alpha : $number;
    $which = mt_rand(0, strlen($str)-1);    //取哪个字符
    $code = substr($str, $which, 1);        //取字符
    $j = !$i ? 4 : $j+15;                   //绘字符位置
    $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随机颜色
    Imagechar($im, $fontsize, $j, 6, $code, $color3);            //绘字符
    $randcode .= $code;                                          //逐位加入验证码字符串
}
//把验证码字符串写入session
session_start();
$_SESSION['VerificationCode_session'] = $randcode;
/*
* 添加干扰
*/
for($i=0; $i<1; $i++)//绘背景干扰线
{   
    $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));                          //干扰线颜色
    ImageArc($im, mt_rand(-5,$width), mt_rand(-5,$height), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线
}   
for($i=0; $i<$digits*40; $i++)//绘背景干扰点
{   
    $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色 
    ImageSetPixel($im, mt_rand(0,$width), mt_rand(0,$height), $color2);                 //干扰点
}

ob_clean();     //清空(擦掉)输出缓冲区 防止出现'图像因其本身有错无法显示'的问题
/*绘图结束*/
Imagegif($im);
ImageDestroy($im);
/*销毁图像*/
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值