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 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 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
mysql 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
财务审计整改报告
2014/11/06 职场文书
评先进个人材料
2014/12/29 职场文书
司机个人年终总结
2015/03/03 职场文书
清洁工个人总结
2015/03/04 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
中学政教处工作总结
2015/08/13 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB