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) ;
这样就省略了创建资源句柄和填充背景颜色两步了。