php简单验证码

                                         php简单验证码:

1:创建验证码图像

2:将随机验证码保存在session中,调用要开启session;

3:js点击刷新验证码

示例图:

code.php:

<?php
header('Content-type:image/png');  //声明是一个图片
session_start();  //开启session
// 随机因子
$arr = [0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,m,n,p,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,V,W,X,Y,Z];
// 通过循环得到四位验证码
for($i = 0;$i<4;$i++){
	$key = array_rand($arr);
	$str .= $arr[$key];
}
$_SESSION['code'] = strtolower($str);             //使用session存储验证码字符串使用小写
$img = imagecreatetruecolor(100, 30);             //得到图片资源句柄
$blue = imagecolorallocate($img, 0, 102, 255);    //设置颜色 蓝色
$white = imagecolorallocate($img, 255, 255, 255); //设置颜色 白色
$black = imagecolorallocate($img, 0, 0, 0);       //设置颜色 黑色
$font = dirname(__FILE__).'/font/elephant.ttf';                      //引入字体文件
imagefill($img, 0, 0, $blue);                     //填充验证码图片背景颜色
imagerectangle($img, 0, 0, 99, 28, $black);       //绘制黑色边框
// 随机画线条 打雪花
for($i = 0;$i<4;$i++){
	imageline($img, mt_rand(0,90), mt_rand(0,30), mt_rand(0,90), mt_rand(0,30), $black);
	imagestring($img, 1, mt_rand(1,100), mt_rand(1,20), '*', $white);
}
// 调整字符串的位置输出  //填充字符串
for($i = 0;$i<strlen($_SESSION['code']);$i++){
	imagestring($img, 6, (100/4)*$i+mt_rand(1,5), mt_rand(1,10), $_SESSION['code'][$i], $white);
}
// 第二种 使用 字体输出需要有字体文件
// for($i = 0;$i<strlen($_SESSION['code']);$i++){
// 	imagettftext($img, 14, 0,(100/4)*$i+mt_rand(1,5), 20, $white, $font, $_SESSION['code'][$i]);
// }
imagepng($img);                                   //输出图片
imagedestroy($img);                               //销毁图片
?>

html调用:js刷新: οnclick="javascript:this.src = 'demo_0.6.php?tm='+Math.random()"

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>验证码</title>
</head>
<body>
<img src="demo_0.6.php" onclick="javascript:this.src = 'code.php?tm='+Math.random()">
</body>
</html>

 第二种使用字体文件输出效果:

PS:图片资源句柄可以使用自带的图片:$img = imagecreatefrompng(filename) ;

这样就省略了创建资源句柄和填充背景颜色两步了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值