PHP5中GD库生成图形验证码(有汉字)


Posted in PHP onJuly 28, 2013

利用PHP5中GD库生成图形验证码

PHP5中GD库生成图形验证码(有汉字) 

类似于下面这样
1.利用GD库函数生成图片,并在图片上写指定字符
imagecreatetruecolor 新建一个真彩色图像
imagecolorallocate 为一幅图像分配颜色(调色板)
imagestring 绘制字符
imageline 绘制线条
imagesetpixel 打像素点
2.输出图片
imagejpeg($img);
PHP实现过程,代码中注释详细,这里不做过多解释
verify.php

<?php 
//1.qi启用gd库GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 
// 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 
session_start(); 
// 把GBK编码的字符串转换成UTF-8字符串,第一个参数之所以写GBK,是因为本php文件在主机中存储的编码是GBK编码 
// UTF-8编码浏览器普遍支持,通用性强,这里就转换成UTF-8 
$str = iconv("GBK", "utf-8", "芸芸众生绿水青山名胜古迹敞开心胸便会云蒸霞蔚快乐将永远伴随着你"); 
if(!is_string($str) || !mb_check_encoding($str,"utf-8")) 
{ 
exit("不是字符串或者不是utf-8"); 
} 
$zhongwenku_size; 
// 按UTF-8编码方式获取字符串的长度 
$zhongwenku_size = mb_strlen($str,"UTF-8"); 
// 把上述字符导入数组中 
$zhongwenku = array(); 
for( $i=0; $i<$zhongwenku_size; $i++) 
{ 
$zhongwenku[$i] = mb_substr($str, $i,1,"UTF-8"); 
} 
$result = ""; 
// 图片上要写入的四个字符 
for($i=0; $i<4; $i++) 
{ 
switch (rand(0, 1)) 
{ 
case 0: 
$result.=$zhongwenku[rand(0, $zhongwenku_size-1)]; 
break; 
case 1: 
$result.=dechex(rand(0,15)); 
break; 
} } 
$_SESSION["check"] = $result; 
// 创建一个真彩图片 宽100,高30 
$img = imagecreatetruecolor(100, 30); 
// 分配背景颜色 
$bg = imagecolorallocate($img, 0, 0, 0); 
// 分配文字颜色 
$te = imagecolorallocate($img, 255,255,255); 
// 在图片上写字符串 
//imagestring($img, rand(3,8), rand(1,70), rand(1,10), $result, $te); 
// 在图片上根据载入字体可以写出特殊字体 
imagettftext($img, 13, rand(2, 9), 20 ,20, $te, "MSYH.TTF",$result); 
$_SESSION["check"] = $result; 
for($i=0; $i<3; $i++) 
{ 
// $t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255)); 
// 画线 
imageline($img, 0, rand(0, 20), rand(70,100), rand(0, 20), $te); 
} 
$t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255)); 
// 为图片添加噪点 
for($i=0; $i<200; $i++) 
{ 
imagesetpixel($img, rand(1, 100), rand(1, 30), $t); 
} 
// 发送http头信息 指定本次发送的是image中的jpeg 
header("Content-type: image/jpeg"); 
// 输出jpeg图片至浏览器 
imagejpeg($img); 
?>

submit.php
<?php 
session_start(); 
if(@$_POST['check']) 
{ 
if($_POST["check"] == $_SESSION["check"]) 
{ 
echo" 恭喜你!验证码输入正确!"; 
}else{ 
echo" 不好意思验证码输入错误"; 
} 
} 
?> 
<form action="" method="post"> 
<img src="verify.php"/> </br> 
<input type="text" name="check"></br> 
<input type="submit" value="submit"></br> 
</form>

代码中MRYH.ttf 是你要设置的字体。
PHP 相关文章推荐
PHP连接access数据库
Mar 27 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
基于PHP一些十分严重的缺陷详解
Jun 03 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
php以post形式发送xml的方法
Nov 04 PHP
PHP二维数组去重实例分析
Nov 18 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 #PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 #PHP
table标签的结构与合并单元格的实现方法
Jul 24 #PHP
ueditor 1.2.6 使用方法说明
Jul 24 #PHP
PHP与javascript实现变量交互的示例代码
Jul 23 #PHP
php curl基本操作详解
Jul 23 #PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 #PHP
You might like
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP导入导出Excel代码
2015/07/07 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
python正则表达式之对号入座篇
2018/07/24 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
小班秋游活动方案
2014/02/22 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
2016教师节问候语
2015/11/10 职场文书
2019年思想汇报
2019/06/20 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
vue判断按钮是否可以点击
2022/04/09 Vue.js
python实现简单的三子棋游戏
2022/04/28 Python