文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>原创安全的验证码

原创安全的验证码

时间:2007-09-18  来源:lib

要是你载入背景图片,将更安全
/**
* 验证码
* @link http://lib.cublog.cn 转载请注明出处
* @autor 流水孟春 cmpan(at)qq.com
*/
?php
function confirmCode(){
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
   
    // HTTP/1.0
    header('Pragma: no-cache');
            
    header("content-type: image/png");
            
    $length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
    // 生成校验码
    //function confirmCode($length){
    $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
    $codeWave = 7; // 验证码上线波动
    $imageX = mt_rand(1, 55); // 左边距
    $imageY = mt_rand(1, 55) + $codeWave; // 上边距
    $imageL = $imageX + $length*10 + 100; // 图片宽度
    $imageH = $imageY + 100; // 图片高度
    $noiseNum = 300*$length; // 杂点数量
    $lineNum = 35; // 干扰线数量
    // 建立一幅 $imageL x $imageH 的图像
    $image = imagecreate($imageL, $imageH);
    $bg = imagecolorallocate($image, 255, 255, 255); // 白色背景
    $rectangleColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 边框颜色
    $noiseColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 杂点颜色
   
    //imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
   
    //加入干扰线   
    for($i=0; $i$lineNum; $i++){
     $lineColor = imagecolorallocate($image, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225)); //干扰线颜色
        imageline($image, mt_rand(1, $imageL - 50), mt_rand(1, $imageH - 30),   
         mt_rand(1, $imageL), mt_rand(1, $imageH), $lineColor);
        imagestring($image, 5, mt_rand(1,$imageL), mt_rand(1,$imageH), '*', $lineColor);
    }
   
    $code = ''; // 校验码
    $codeNX = 0; // 校验码第N个字符的左边距
    for ($i = 0; $i$length; $i++) {
        $code[$i] = $codeSet[mt_rand(0, 27)];
        $codeNX += 10 + mt_rand(0,30);
        imagestring($image, 5, $codeNX, $imageY+ mt_rand(-$codeWave, $codeWave),
        $code[$i], imagecolorallocate($image, mt_rand(1,180), mt_rand(1,200), mt_rand(1,200))); // 把校验码写入图像
    }
    $_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
    //加入杂点
    for($i=0;$i$noiseNum;$i++)
    imagesetpixel($image,mt_rand(1,$imageL),mt_rand(1,$imageH),imagecolorallocate($image,
     mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)));
         
    imagepng($image); // 输出图像
    imagedestroy($image);
}

==============================================================================
做了一些改进
==========》
?php
/**
* 验证码
*
* @author 流水孟春 cmpan(at)qq.com
* @copyright GPL
*/
if($_GET['act'] == 'confirmCode') {
    confirmCode();
}
function confirmCode(){
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
   
    // HTTP/1.0
    header('Pragma: no-cache');
            
    header("content-type: image/png");
            
    $length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
    // 生成校验码
    //function confirmCode($length){
    $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
    $codeWave = 7; // 验证码上线波动
    $imageX = mt_rand(1, 55); // 左边距
    $imageY = mt_rand(1, 40) + $codeWave; // 上边距
    $imageL = $imageX + $length*10 + 100; // 图片宽度
    $imageH = $imageY + 30; // 图片高度
    $noiseNum = 300*$length; // 杂点数量
    $lineNum = 50; // 干扰线数量
    // 建立一幅 $imageL x $imageH 的图像
    $image = imagecreatetruecolor($imageL, $imageH);        
    $bgImg = 'images/confirumcode/background/background' . mt_rand(1,8) . '.jpg';
    $bg = imagecreatefromjpeg($bgImg);
   
    imagecopyresampled($image, $bg, 0, 0, mt_rand(0,10), mt_rand(0,10), $imageL, $imageH, 180, 70);
   
    //imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
   
   
    $code = ''; // 校验码
    $codeNX = 0; // 校验码第N个字符的左边距
    for ($i = 0; $i$length; $i++) {
        $code[$i] = $codeSet[mt_rand(0, 27)];
        $codeNX += 10 + mt_rand(0,30);
        imagestring($image, 5, $codeNX, $imageY+ mt_rand(0, $codeWave),
        $code[$i], imagecolorallocate($image, mt_rand(1,100), mt_rand(1,100), mt_rand(1,100))); // 把校验码写入图像
    }
    $_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
         
    imagepng($image); // 输出图像
    imagedestroy($image);
}

相关阅读 更多 +
排行榜 更多 +
胜利女神新的希望小米服手游下载

胜利女神新的希望小米服手游下载

角色扮演 下载
我要当老板伐木工厂游戏下载

我要当老板伐木工厂游戏下载

模拟经营 下载
涡轮螺旋桨最新版下载

涡轮螺旋桨最新版下载

模拟经营 下载