PHP应用GD库完成中文验证码功能

  • 1,366
摘要

本篇文章讲述的是如何使用PHP应用GD库实现验证码功能,本章文章内容取自布尔教育燕十八老师讲述的关于PHP如何实现验证码功能。如下文章中代码如果有错,欢迎指正。同时也希望这篇文章能够对PHP爱好者有一定的借鉴之处!

PHP应用GD库完成中文验证码功能主要步骤:

  • 创建画布
  • 制造颜色
  • 函数随机生成4个字符
  • 水平地画一行字符串
  • 输出
  • 销毁

PHP应用GD库完成中文验证码功能

<?php

$im = imagecreatetruecolor(50,25);// 1 造画布
$red = imagecolorallocate($im,255,0,0);// 2 造颜料准备写字 ,如果不填充颜色默认:黑色
$str = substr(str_shuffle('ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'),0,4);//随机打乱,取4个
/*
说明:
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
参数分别代表: 画布资源,字体大小(1-5中选择), 字符最左上角的x坐标,y坐标 ,要写的字符串,颜色
*/
imagestring($im,5,8,5,$str,$red);//imagestring — 水平地画一行字符串
header('content-type: image/png');
imagepng($im);

验证码画干扰线!

<?php
$im = imagecreatetruecolor(50,25);// 1 造画布
$red = imagecolorallocate($im,255,0,0);// 2 造颜料准备写字
$gray = imagecolorallocate($im,220,220,220);// 浅色背景
$randcolor = imagecolorallocate($im,mt_rand(0,150),mt_rand(0,150),mt_rand(0,150));// 随机颜色
$linecolor1 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));// 随机颜色
$linecolor2 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));// 随机颜色
$linecolor3 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));// 随机颜色
imagefill($im,0,0,$gray);// 填充背景
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor1);// 画干扰线
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor2);// 画干扰线
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor3);// 画干扰线
/*
说明
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
参数分别代表: 画布资源,字体大小(1-5中选择), 字符最左上角的x坐标,y坐标 ,要写的字符串,颜色
*/
$str = substr(str_shuffle('ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'),0,4);
imagestring($im,5,8,5,$str,$randcolor);
header('content-type: image/png');
imagepng($im);

以上代码有的人会说,这样的验证码点击图片为什么不会刷新验证码呢?别急,加一个js不就好了!

以下js纯属为了实现验证码所写的一些步骤,有些代码用的不规范,请各位见谅!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>PHP引用GD库完成验证码_开拓者博客</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="开拓者博客[150643.com]" />
<meta name="keywords" content="开拓者博客[150643.com]" />
<script type="text/javascript">
function chv(vcode) {
    //var vcode = document.getElementsByTagName('img')[0];
    vcode.src = vcode.src+'?_s='+Math.random();
}
</script>

<style type="text/css">
</style>
</head>
    <body>
        <p>
        验证码:<input type="text" name="vcode" /><img src="04.php" onclick="chv(this);" />
        </p>
        <p>
        验证码:<input type="text" name="vcode" /><img src="05.php" onclick="chv(this);" />
        </p>
    </body>
</html>

图片里写中文,并做中文验证码功能:

PHP应用GD库完成中文验证码功能

<?php
/***
图片里写中文,并做中文验证码
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
参数分别代表:画图资源,字体大小,字体逆时针旋转角度,x坐标,y坐标,填充颜色,字体引入,字符串.
***/
$im = imagecreatefromjpeg('./home.jpg');// 创建画布
$blue = imagecolorallocate($im,0,0,255);// 创建颜料
imagettftext($im,25,30,327,157,$blue,'./msyh.ttf','开拓者博客');// 写字
header('content-type: image/jpeg');// 输出或保存
imagejpeg($im);
imagedestroy($im);// 销毁

中文验证码:

PHP应用GD库完成中文验证码功能

<?php

/***
中文验证码
如何产生随机的中文字符串?
中文按其unicode编码,是有规律的,
位于0x4E00-0x9FA0
我们可以在uncode范围内随机选取,
但是 请注意,对于用户来说,能否认得?
因为有大量生僻字.
所以在实际项目中,只是抽取几百或上千个常用汉字,放数组里,随机选取.
***/
$char = array('我','是','开','拓','者','博','主');
shuffle($char);
$code = implode('',array_slice($char,0,4));
$im = imagecreatetruecolor(65,25);// 画布
$gray = imagecolorallocate($im,200,200,200);// 颜料
$blue = imagecolorallocate($im,0,0,255);
imagefill($im,0,0,$gray);// 填充
imagettftext($im,12,0,2,20,$blue,'./msyh.ttf',$code);// 写字
header('content-type: image/jpeg;');// 输出
imagejpeg($im);
imagedestroy($im);//销毁

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年11月17日19:26:45
  • 转载请务必保留本文链接:https://www.150643.com/409.html
匿名

发表评论

匿名网友 填写信息