首页 > 代码库 > PHP.20-验证码生成

PHP.20-验证码生成

                    生成验证码

思路:先定义验证码函数getCode()

//绘制验证码
  $num = 4; //字符长度
  getCode($num, 2);

  1、创建画布,分配颜色 imagecreatetruecolor()
    $height 
    $width = $num*20;    //假设每个字的大小为18
    $im = imagecreatetruecolor($width, $height); //创建一个真彩色画布
    $bg = imagecolorallocate($im, rand(200,250), rand(250,255), rand(150, 255)); //定义背景颜色图像
    $color[] = imagecolorallocate($im, 240,240,240); //定义字体颜色【可以数组形式存储,定义某些深色字体】
    

  2、开始绘画(一切都在画布$im上进行)
    imagefill($im, 0,0, $bg);    //区域填充(把背景填充到画布)
    imagerectangle($im, 0,0, $width-1, $height-1, $color[rand(0,3)]); //定义个边框

    //绘制验证码:逐字输出
    for()
      imagettftext($im, rand(16,18), rand(-40,40), 8+(18*$i),18, $color[rand(0,3)], "msyh.ttc", $str[$i]);
    //随机添加干扰点(点数自定)
    for(){
      $c = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); //干扰点颜色
      imagesetpixel($im, rand(0,$width), rand(0,$height), $c);
    //随机添加干扰线(线数自定)
    for(){
      $c = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); //干扰线颜色
      imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $c);

  3、输出图像
    header("Content-Type:image/png"); //设置响应头(此前不能有输出
    imagepng($im);


  4、销毁图片
    imagedestroy($im);

//自定义函数,获取验证码
  function getCode($m=4, $type=1)
  {
    $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $t = array(9, 35, strlen($str)-1); //类型划分
    $c = "";
    for($i=0; $i<$m; $i++)
    $c .= $str[rand(0, $t[$type])];

//调用验证码,onclick可实现点击图片刷新

  <img src="http://www.mamicode.com/code.php" /onclick="this.src=http://www.mamicode.com/‘code.php?id=‘+Math.random()‘">

PHP.20-验证码生成