php验证码之汉字验证

<?php
    //转自:https://blog.csdn.net/tian_123456789/article/details/70160911
	session_start();
	//创建一张宽100高30的图像
	$image = imagecreatetruecolor(200, 60);
	//为$image设置背景颜色为白色
	$bgcolor = imagecolorallocate($image, 255, 255, 255);
	//填充背景颜色
	imagefill($image, 0, 0, $bgcolor);
 
	//生成4个随机数
/*	for($i=0; $i<4; $i++){
		//设置字体为6
		$fontsize=6;
		//设置背景颜色为随机颜色
		$fontcolor=imagecolorallocate($image, rand(0,120), rand(0, 120), rand(0,120));
		//生成随机数字
		$fontcontent=rand(0, 9);
		//控制数字出现的位置x->left y->top
		$x=($i*100/4)+rand(5, 10);
		$y=rand(5, 10);
		imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
	}
*/
 
	//引入一个字体文件使之能够显示中文下面有详细截图展示
	$fontface="STXINWEI.TTF";
	$str="我䃽心于死来说羊补牢经而能褟庆幸自己没在那敲响实公共警钟底应该何做系乎寥成为话题密问其木起质疑鼚涌出赔偿阳从左到臂中段基本废掉甯全事关每个生命绝不允许万危险皺什么屡发吃故背后都有政府监管部门产者保养维护和所失职人祸原因民网亲带着孩溲卷碯躡目睹这幕如此悲情面估计无数潸然泪下终止竟孤偶让陷表淋漓投资贪婪览遗见缝插针机想他考虑社利益牛弹琴大势文章称组织稽查执法力量集抛售票线索速及皌啬服推卸责兆历统谁望看蚄谓定忮改眺㕅䤟轻描淡写追甚负躺顶格惩罚期操汻怂王两天国股暴跌步把市脆弱性熟造月日上午湖北荆州安良百货商场内一名岁的女子被搅入手扶电梯身亡据广西梧视台报道位多小朋友太赚钱减敢地惹火烧三未合约主结算即沪深持增加张但仍例近萎缩比少沒恐慌沽現象并它移括香港新坡华富貨当核同声明队根退可户恶空分析指变化跑海或谋工具星疾呼过仅街老鼠喊打使证高调处金融交易仓限許卖单临规透缺却再也回才是最痛眰方运行既存就需要意识对拥否已尽了义务确正常转宣传尤进紧急制动样按钮播时候修些之众则件将会头尾答果任层现纰漏至重洞导致剧次以长鸣们注领域施与另外奏更毺郉平论家庭还学校给灌输各种救皋措办演练包含消防等容只够记像吝庥懂得示昌敪诌提前告知顾客通较初份达涉总值元宠模吗年热炒作显著升傍晚点美超亿由且开始聚早嗜血放屠刀立佛晃取衍润几用极灾难况招拆狠宝马奥拓展拳脚击败攻举解预决强获纷逃直崩盘清楚";
	//因为每个汉字占三个字节,所以分割的时候每三个分割一次
	$strdb=str_split($str, 3);
	header("content-type:text/html;charset=utf-8");
	//  var_dump($strdb);
	// die();
	$captch_code="";
	for($i=0; $i<4; $i++){
		$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0, 120));
		
		//$cn=$strdb[floor(rand(0,4))];
		$index=rand(0, count($strdb));
		$cn=$strdb[$index];
		$captch_code.=$cn;
		//array imagettftext ( resource image, int size, int angle, int x, int y, int color, string fontfile, string text)
		//imagettftext() 将字符串 text 画到 image 所代表的图像上,从坐标 x,y(左上角为 0, 0)开始,角度为 angle,颜色为 color,使用 fontfile 所指定的 truetype 字体文件。根据 php教程 所使用的 gd 库的不同,如果 fontfile 没有以 '/'开头,则 '.ttf' 将被加到文件名之后并且会搜索库定义字体路径。
		imagettftext($image, mt_rand(20, 24), mt_rand(-60, 60), (40*$i+20), mt_rand(30, 35), $fontcolor, $fontface, $cn);	
 
 
	}
	$_SESSION['authcode']=$captch_code;
	//g干扰点
	for($i=0; $i<300; $i++){
		$pointcolor=imagecolorallocate($image, rand(50,200), rand(50, 200), rand(50, 200));
		imagesetpixel( $image, rand(1, 199), rand(1,59), $pointcolor);
	}
 
	//干扰线
	for ($i=0; $i <4 ; $i++) { 
		# code...
		$linecolor=imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
		imageline($image, rand(1, 199), rand(1, 59), rand(1, 199), rand(1,59), $linecolor);
	}
	//设置header图片格式为png
	header('content-type:image/png');
	//显示图片
	imagepng($image);
 
 
	//destory
	imagedestroy($image);
 
?>

表单提交文件form_cn.php:

<?php
	header('content-type:text/html;charset=utf-8');
	if(isset($_REQUEST['authcode'])){
		session_start();
		
		if(trim($_REQUEST['authcode']) == $_SESSION['authcode']){
			echo '<font color="#0000CC">输入正确</font>';
		}else{
			echo '<font color="#CC0000"> <b>输入错误</b> </font>';
		}
		exit();
	}
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>确认验证码</title>
	</head>
	<body>
		<form method="post" action="./form_cn.php">
			<p>
				验证码图片:<img  id="captcha_img" border="1" src="./captcha_cn.php?r=<?php echo rand();?>" width:200px; height:60px" />
				<a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha_cn.php?r=Math.random()'">换一个?</a>
			</p>
			<p>请输入图片中的内容:<input type="text" name="authcode" value"" /></p>
			<p><input type="submit" value="提交" style="padding:6px 20px;"></p>
		</form>
	</body>
</html>

效果图如下:

上面说的关于字体导入:先打开控制面板,在搜索框中输入字体进入该文件夹,在该文件夹后面有关于中文的字体文件复制一个到该php的目录下

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值