PHP制作数字字母混合验证码、图片验证码、中文验证码
程序员文章站
2022-06-12 16:47:29
...
1.制作数字和字母验证码,并添加干扰点、干扰线。
实现代码如下:
captcha.php文件:
<?php
session_start();//必须置于顶部启动
// 创建画布
$image = imagecreatetruecolor ( 100, 30 );
$bgcolor = imagecolorallocate ( $image, 160, 200, 180 );
imagefill ( $image, 0, 0, $bgcolor );
// 生成随机数
// for($i=0;$i<4;$i++){
// $fontsize = 6;
// $fontcolor = imagecolorallocate($image, mt_rand(0, 80), mt_rand(50, 100), mt_rand(50, 120));
// $fontcontent = mt_rand(0, 9);
// $x = $i*20+mt_rand(5, 10);
// $y = mt_rand(5, 10);
// imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
// }
$captch_code = "";//空变量
// 生成字母和数字混合
for($i = 0; $i < 4; $i ++) {
$fontsize = 6;
$fontcolor = imagecolorallocate ( $image, mt_rand ( 0, 80 ), mt_rand ( 50, 100 ), mt_rand ( 50, 120 ) );
$data = 'abcdefghijkmnprstuvwxyABCDEFGHIJKLMNPQRSTUVWXY3456789';//除去容易字母数字混淆的元素
$fontcontent = substr($data, mt_rand(0, strlen($data)),1);
$captch_code .= $fontcontent;
$x = $i * 20 + mt_rand ( 5, 10 );
$y = mt_rand ( 5, 10 );
imagestring ( $image, $fontsize, $x, $y, $fontcontent, $fontcolor );
}
$_SESSION['auto_code'] = $captch_code;//保存在session的auto_code变量中
// 增加干扰点
for($i = 0; $i < 200; $i ++) {
$pointColor = imagecolorallocate ( $image, mt_rand ( 100, 200 ), mt_rand ( 150, 180 ), mt_rand ( 100, 240 ) );
imagesetpixel ( $image, mt_rand ( 1, 99 ), mt_rand ( 1, 29 ), $pointColor );
}
// 增加干扰线
for($i = 0; $i < 4; $i ++) {
$lineColor = imagecolorallocate ( $image, mt_rand ( 0, 200 ), mt_rand ( 50, 180 ), mt_rand ( 80, 240 ) );
imageline ( $image, mt_rand ( 1, 99 ), mt_rand ( 1, 29 ), mt_rand ( 1, 99 ), mt_rand ( 1, 29 ), $lineColor );
}
header ( "content-type:image/png" );
imagepng ( $image );
imagedestroy ( $image );
在实际应用中调用实例:
实现代码如下:
form.php文件:
<?php
if(isset($_REQUEST['auto_code'])){
session_start();
if(strtolower($_REQUEST['auto_code']) == strtolower($_SESSION['auto_code'])){
echo '输入的验证码正确!';
}else{
echo '验证码输入错误,请重新输入!';
}
exit();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="tezt/html;charset=utf-8">
<title>验证码校验</title>
</head>
<body>
<form method="post" action="./form.php">
<p>验证码图片:
<img id="captcha_img" alt="显示失败!!!" src="./captcha.php?r=<?php echo rand();?>" width="100" height="30">
<a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r'+Math.random()">换一张</a>
</p>
<p>请输入验证码信息:<input type="text" name="auto_code" value=""></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
2.制作图片验证码,示例如下:
captcha_img.php文件:
<?php
session_start();
$table = array(
'pic1'=>'兔',
'pic2'=>'猫',
'pic3'=>'老虎',
'pic4'=>'熊猫',
);
$index = rand(1,4);
$value=$table['pic'.$index];
$_SESSION['auto_code']=$value;
$filename=dirname(__FILE__).'\\images\pic'.$index.'.jpg';//这里路径一定要写对
$contents=file_get_contents($filename);
ob_clean();
header('content-type:image/jpg');
echo $contents;
在表单中调用:
form_img.php文件:
<?php
session_start();
$table = array(
'pic1'=>'兔',
'pic2'=>'猫',
'pic3'=>'老虎',
'pic4'=>'熊猫',
);
$index = rand(1,4);
$value=$table['pic'.$index];
$_SESSION['auto_code']=$value;
$filename=dirname(__FILE__).'\\images\pic'.$index.'.jpg';//这里路径一定要写对
$contents=file_get_contents($filename);
ob_clean();
header('content-type:image/jpg');
echo $contents;
3.制作中文验证码
制作思路同上,就不一一赘述了。
captcha_cn.php文件
<?php
// error_reporting(E_ALL & ~E_NOTICE);
session_start();//必须置于顶部启动
// 创建画布
$image = imagecreatetruecolor ( 200, 60 );
$bgcolor = imagecolorallocate ( $image, 160, 200, 180 );
imagefill ( $image, 0, 0, $bgcolor );
$fontface='SIMHEI.TTF';
$str="我们都是打快点打算考虑到觉觉得授课是肯定很快才能对你发法师法基安抚发生了开发";
$strdb=str_split(substr($str, 3),3);//每三个字符一个汉字/一个汉字三个字符
// $strdb = array('天');
// $strdb=iconv("gbk","utf-8", "天马行空");
$captch_code='';
// 生成字母和数字混合
for($i = 0; $i < 4; $i ++) {
// $cn=$strdb[$i];
$index=mt_rand(0, count($strdb));
$cn=$strdb[$index];
echo $cn;
$captch_code.=$cn;
$size=mt_rand(5, 20);
$angle=mt_rand(-25, 25);
$x=$i*40+20;
$y=mt_rand(25, 35);
$fontcolor = imagecolorallocate ( $image, mt_rand ( 0, 80 ), mt_rand ( 50, 100 ), mt_rand ( 50, 120 ) );
imagettftext($image, $size, $angle, $x, $y, $fontcolor,$fontface, $cn);
}
$_SESSION['auto_code'] = $captch_code;//保存在session的auto_code变量中
// 增加干扰点
for($i = 0; $i < 200; $i ++) {
$pointColor = imagecolorallocate ( $image, mt_rand ( 100, 200 ), mt_rand ( 150, 180 ), mt_rand ( 100, 240 ) );
imagesetpixel ( $image, mt_rand ( 1, 199 ), mt_rand ( 1, 59 ), $pointColor );
}
// 增加干扰线
for($i = 0; $i < 4; $i ++) {
$lineColor = imagecolorallocate ( $image, mt_rand ( 0, 200 ), mt_rand ( 50, 180 ), mt_rand ( 80, 240 ) );
imageline ( $image, mt_rand ( 1, 199 ), mt_rand ( 1, 59 ), mt_rand ( 1, 199 ), mt_rand ( 1, 59 ), $lineColor );
}
ob_clean();
header ( "Content-Type: image/png");
imagepng ( $image );
imagedestroy ( $image );
form_cn.php文件:
<?php
if(isset($_REQUEST['auto_code'])){
session_start();
if(strtolower($_REQUEST['auto_code']) == strtolower($_SESSION['auto_code'])){
echo '输入的验证码正确!';
}else{
echo '验证码输入错误,请重新输入!';
}
exit();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta charset="utf-8">
<title>验证码校验</title>
</head>
<body>
<form method="post" action="./form.php">
<p>验证码图片:
<img id="captcha_img" alt="显示失败!!!" src="./captcha_cn.php?r=<?php echo rand();?>" width="200" height="60">
<a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha_cn.php?r'+Math.random()">换一张</a>
</p>
<p>请输入验证码信息:<input type="text" name="auto_code" value=""></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
哈哈~~以上三种验证码就只做成功了,再学习下图片水印。
上一篇: SQL Server
下一篇: 夏至节气防病五妙招 风邪伤人要谨防