php生成图片验证码


Posted in PHP onJune 09, 2015

先给看下 大致的效果

php生成图片验证码

那么接下来的就直接贴代码吧

<?php
 $image = imagecreatetruecolor(100, 30); //创建画布
 $imagecolor = imagecolorallocate($image, 255, 255, 255); //背景色
 imagefill($image, 0, 0, $imagecolor); //填充背景色
 for($i=0;$i<4;$i++ ){     //循环4位数
  $fontsize = 6;
  $fontcolor = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200));
  $fontcontent = rand(0, 9);
  $x = $i*100/4 + rand(5, 15);
  $y = rand(5, 10);
  imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
 }
 for($i=0;$i<200;$i++ ){    //循环 添加干扰点
  $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
  $x = rand(1, 99);
  $y = rand(1, 29);
  imagesetpixel($image, $x, $y, $pointcolor);
 }
 for($i=0;$i<3;$i++){    //循环 添加干扰线 
  $linecolor = imagecolorallocate($image, rand(100, 250), rand(100, 250), rand(100, 250));
  $x1 = rand(1, 25);
  $x2 = rand(50, 75);
  $y1 = rand(1, 15);
  $y2 = rand(15, 25);
  imageline($image, $x1, $y1, $x2, $y2, $linecolor);
 }
 header("content-type:image/png");
 imagepng($image);
 imagedestroy($image);
?>

再给大家分享一个可以生成中文验证码

<?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);

?>

再来一个实例吧

<?php
 
session_start();
function random($len) {
  $srcstr = "1a2s3d4f5g6hj8k9qwertyupzxcvbnm";
  mt_srand();
  $strs = "";
  for ($i = 0; $i < $len; $i++) {
    $strs .= $srcstr[mt_rand(0, 30)];
  }
  return $strs;
}
 
//随机生成的字符串
$str = random(4); 
 
//验证码图片的宽度
$width = 50;   
 
//验证码图片的高度
$height = 25;   
 
//声明需要创建的图层的图片格式
@ header("Content-Type:image/png");
 
//创建一个图层
$im = imagecreate($width, $height);
 
//背景色
$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
 
//模糊点颜色
$pix = imagecolorallocate($im, 187, 230, 247);
 
//字体色
$font = imagecolorallocate($im, 41, 163, 238);
 
//绘模糊作用的点
mt_srand();
for ($i = 0; $i < 1000; $i++) {
  imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
}
 
//输出字符
imagestring($im, 5, 7, 5, $str, $font);
 
//输出矩形
imagerectangle($im, 0, 0, $width -1, $height -1, $font);
 
//输出图片
imagepng($im);
 
imagedestroy($im);
 
$str = md5($str);
 
//选择 cookie
//SetCookie("verification", $str, time() + 7200, "/");
 
//选择 Session
$_SESSION["verification"] = $str;
?>

接下来只要在页面中调用就可以了:

<img id="checkpic" onclick="changing();" src='/images/checkcode.php' />

如果想实现 "看不清?换一张" 效果,添加如下 JS 到页面中

function changing(){
  document.getElementById('checkpic').src="/images/checkcode.php?"+Math.random();
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
php array_intersect()函数使用代码
Jan 14 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP安装memcached扩展笔记
May 28 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 PHP
php判断用户是否手机访问代码
Jun 08 #PHP
浅谈PHP中Stream(流)
Jun 08 #PHP
php实现有趣的人品测试程序实例
Jun 08 #PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 #PHP
php查询whois信息的方法
Jun 08 #PHP
Yii获取当前url和域名的方法
Jun 08 #PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 #PHP
You might like
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
PHP attributes()函数讲解
2019/02/03 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
python中引用与复制用法实例分析
2015/06/04 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
党委班子剖析材料
2014/08/21 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
自书遗嘱范文
2015/08/07 职场文书
中秋节祝酒词
2015/08/12 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
浅谈Java父子类加载顺序
2021/08/04 Java/Android
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技