生成验证码图片(php)

最近在学习前端js时,学习到了如何生成验证码图片,觉得有点神奇(我现在可能觉得什么都很神奇),所以在这里总结 记录一下。

生成图片的后台PHP代码:(命名为 code.php)

 <?php
    session_start();
    getCode(4,60,20);
    
    function getCode($num,$w,$h){    //位数,宽,高
    	$data='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
    	$code="";
    	for($i=0; $i<$num; $i++){
    	    $code.=substr($data,rand(0,strlen($data)-1),1);
    	}
    	//4位验证码也可以用rand(1000,9999)直接生成
    	//将生成的验证码写入session,备验证时用
    	 $_SESSION["code"]=$code;   //保存在SESSION的code中
    	 //创建图片,定义颜色值
    	 header("Content-type: image/PNG");
    	 $im=imagecreate($w,$h);
    	 $black=imagecolorallocate($im, 0, 0, 0);
    	 $gray=imagecolorallocate($im, 200, 200, 200);
    	 $bgcolor=imagecolorallocate($im, 255, 255, 255);
    	 //填充背景
    	 imagefill($im, 0, 0, $gray);
    	 //画边框
    	 imagerectangle($im, 0, 0, $w-1, $h-1, $black);
    	 //在画布上随机生成大量黑点,起干扰作用
    	 for($i=0; $i<80; $i++){
    	     imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
    	 }
    	 //将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
    	 $strx=rand(3,8);
    	 for($i=0; $i<$num; $i++){
    	     $strpos=rand(1,6);
    	     imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
    	     $strx+=rand(8,12);
    	 }
    	 imagepng($im);  //输出图片
    	 imagedestroy($im);  //水房图片所占内存
    }
 ?>

用于验证的后台PHP代码:(命名为 check_code.php)

<?php 
    session_start();   //打开session
    header("Content-Type:text/plain");
    //接收从客户端发来的code
    @$code=$_REQUEST["code"];
    //用客户端的code和session中保存好的code比较
    if(strtolower($code)==strtolower($_SESSION["code"]))    //strtolower为php中转换为小写函数
         echo "true";
    else
         echo "false";
?>

前台js代码

<style>
    .ok{color:green}
    .err{color:red}
</style>

<body>
     验证码:<input id="txtCode" />
     <img src="code.php" />
     <br>
     <sapn id="msgCode"></span>
     <script>
        document.getElementById("txtCode").onkeyup=function(){
           if(document.getElementById("txtCode").value !=""){
              //AJAX 1、获取xhr
              if(window.XMLHttpRequest){
                  var xhr=new XMLHttpRequest();
              }else{
                  var xhr=new ActiveXObject("Microsoft.XMLHttp");
              }
              //2、创建请求
              xhr.open("get","check_code.php?code="+document.getElementById("txtCode").value,true);
              //3、设置回调函数
              xhr.onreadystatechange=function(){
                 if(xhr.readyState==4 && xhr.status==200){
                    var data=xhr.responseText;
                    if(data=="true"){
                        msgCode.innerHTML="验证码正确";
                        msgCode.className="ok";
                    }else{
                        msgCode.innerHTML="验证码错误";
                        msgCode.className="err";
                    }
                 }
              }
              //4、发送请求
              xhr.send();
           }else{msgCode.innerHTML="";}
    	}
     </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值