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注入实例
Oct 09 PHP
php 什么是PEAR?
Mar 19 PHP
php 面向对象的一个例子
Apr 12 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
PHP开发微信支付的代码分享
May 25 PHP
php简单防盗链实现方法
Jul 29 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP实现的多维数组去重操作示例
Jul 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中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
php实现websocket实时消息推送
2018/03/30 PHP
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
js常用代码段整理
2011/11/30 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python字符串的拼接方法总结
2019/11/18 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
python实现同一局域网下传输图片
2020/03/20 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
新闻网站实习自我鉴定
2013/09/25 职场文书
小学毕业感言300字
2014/02/19 职场文书
感恩节活动策划方案
2014/05/16 职场文书
公司仓库管理制度
2015/08/04 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python