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 相关文章推荐
PHP4 与 MySQL 交互使用
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
php xfocus防注入资料
Apr 27 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
深入php var_dump()函数的详解
Jun 05 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
PHP异常处理浅析
May 12 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
ThinkPHP5框架实现简单的批量查询功能示例
Jun 07 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 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
thinkphp中memcache的用法实例
2014/11/29 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
php判断目录存在的简单方法
2019/09/26 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
年会活动策划方案
2014/01/23 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
大连导游词
2015/02/12 职场文书
电气工程师岗位职责
2015/02/12 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL