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模拟SQL Server的两个日期处理函数
Oct 09 PHP
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
php 常用字符串函数总结
Mar 15 PHP
php 将excel导入mysql
Nov 09 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php遍历CSV类实例
Apr 14 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
PHP创建XML接口示例
Jul 04 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中文件上传的安全问题
2006/10/09 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
python列表去重的二种方法
2014/02/14 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python安装scipy的方法步骤
2019/06/26 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python 6行代码制作月历生成器
2020/09/18 Python
python try...finally...的实现方法
2020/11/25 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript