验证码(中)——封装.使用

一.JS点击局部刷新

  这段代码放入图片区域,可以自动刷新局部

   onclick="javascript:this.src='code.php?tm='+Math.random()"

  然后将JS分离出去 

  <img src="code.php" id="code" />

window.onload = function () {
    var code = document.getElementById('code');
    code.onclick = function () {
        this.src='code.php?tm='+Math.random();
    };
};

二.将验证码包装成函数 

  在核心函数库里创建一个_code函数,将验证码代码放入。

  然后设置参数,最大的提供灵活性。

  注意:如果没有任何设置,必须有默认值。

<?php
/**
 * _code()是验证码函数
 * @access public 
 * @param int $_width 表示验证码的长度
 * @param int $_height 表示验证码的高度
 * @param int $_rnd_code 表示验证码的位数
 * @param bool $_flag 表示验证码是否需要边框 
 * @return void 这个函数执行后产生一个验证码
 */
session_start();

function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false) {  
    //创建随机码。之前必须使用<<    $_nmsg = '';  >>创建空字符串,用来存储随机码
    $_nmsg = '';
    for($i=0;$i<$_rnd_code;$i++){
        $_nmsg .= dechex(mt_rand(0, 15));
    }
    
    //保存在session
    $_SESSION['code'] = $_nmsg;
    
    //创建一张图像
    $_img = imagecreatetruecolor($_width,$_height);
    
    //白色
    $_white = imagecolorallocate($_img, 255, 255, 255);
    
    //填充背景色为白色
    imagefill($_img, 0, 0, $_white);
    
    if ($_flag) {
        //黑色,边框
        $_black = imagecolorallocate($_img, 0, 0, 0);
        imagerectangle($_img, 0, 0, $_width-1,$_height-1, $_black);
    }
    
    //随即画出6个线条
    for ($i=0;$i<6;$i++) {
        $_rnd_color = imagecolorallocate($_img,mt_rand(0, 255),mt_rand(0, 255),mt_rand(0, 255));
        imageline($_img,mt_rand(0,$_width),mt_rand(0, $_height),mt_rand(0,$_width),mt_rand(0, $_height),$_rnd_color);
    }
    
    //随即雪花
    for ($i=0;$i<100;$i++) {
        $_rnd_color = imagecolorallocate($_img, mt_rand(200, 255), mt_rand(200, 255),mt_rand(200, 255));
        imagestring($_img, 1, mt_rand(1, $_width), mt_rand(1, $_height), '*', $_rnd_color);
    }
    
    //输出验证码
    for ($i=0;$i<strlen($_SESSION['code']);$i++) {
        $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
        imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
    }
    
    //输出图像
    header('Content-Type: image/png');
    imagepng($_img);
    
    //销毁
    imagedestroy($_img);
}
?>

三.编写函数注释

  将_code()函数编写注释,让代码更清晰。

原文地址:https://www.cnblogs.com/jytblog/p/7423887.html