> php教程 > php手册 > 본문

PHP验证码生成与验证例子

WBOY
풀어 주다: 2016-05-25 16:41:37
원래의
812명이 탐색했습니다.

验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,下面我们来看常用的验证码生成与使用方法.

1 一个简单的验证码实例

1.1 显示验证码的图片,代码如下:

<?php
$num = intval(mt_rand(1000, 9999));
for ($i = 0; $i < 4; $i++) {
    echo "<img  src=img/yzm/" . substr(strval($num) , $i, 1) . ".gif/ alt="PHP验证码生成与验证例子 " >";
}
?>
로그인 후 복사

1.2 验证过程,代码如下:

if (strval($inputyzm)!=strval($num)) 
{
echo "<script>alert(&#39;验证码错误!&#39;);history.go(-1);</script>"; 
exit; 
}
로그인 후 복사

2 一个汉字的验证码实例

2.1 显示验证码的图片,代码如下:

$str="汉","字","验","证","码"); //可以定义汉字的内容和个数

<?php
$word = strlen($str));
for ($i = 0; $i < 4; $i++) {
    $num = rand(0, $word);
    $img = $img . "<img  src=&#39;../images/yzm/" . $num".gif&#39;/ alt="PHP验证码生成与验证例子 " >";
    $pic = $pic . $str[$num];
}
?>
로그인 후 복사

2.2 将生成的随机字符串赋给一个隐藏域,代码如下:

<input type="hidden" name="yzm" value="<?php
echo $pic; ?>">
로그인 후 복사

2.3 定义一个check()函数,代码如下:

<script language="javascript"> 
    function check(form) {
    if (form.yzm.value == "") {
    alert("请输入验证码");
    form.yzm.focus();
    return false;
    }
    if (form.yzm.vale != form.yz.value) {
    alert("验证码错误");
    form.yzm.focus();
    return false;
    }
    }
</script>
로그인 후 복사

看一个完整的实例,php 验证码生成与调用的例子,平时开发中经常使用,记录一下.

1、验证码生成文件code.php,代码如下:

<?php
Header("Content-type:image/png");
//定义header,声明图片文件,最好是png,无版权之扰;
//生成新的四位整数验证码
session_start(); //开启session;
authnum_session = &#39;&#39;;
str = &#39;abcdefghijkmnpqrstuvwxyz1234567890&#39;;
//定义用来显示在图片上的数字和字母;
l = strlen(str); //得到字串的长度;
//循环随机抽取四位前面定义的字母和数字;
for (i = 1; i <= 4; i++) {
    num = rand(0, l - 1);
    //每次随机抽取一位数字;从第一个字到该字串最大长度,
    //减1是因为截取字符是从0开始起算;这样34字符任意都有可能排在其中;
    authnum_session.= str[num];
    //将通过数字得来的字符连起来一共是四位;
    
}
session_register("authnum_session");
//用session来做验证也不错;注册session,名称为authnum_session,
//其它页面只要包含了该图片
//即可以通过_SESSION["authnum_session"]来调用
//生成验证码图片,
srand((double)microtime() * 1000000);
im = imagecreate(50, 20); //图片宽与高;
//主要用到黑白灰三种色;
black = ImageColorAllocate(im, 0, 0, 0);
white = ImageColorAllocate(im, 255, 255, 255);
gray = ImageColorAllocate(im, 200, 200, 200);
//将四位整数验证码绘入图片
imagefill(im, 68, 30, gray);
//如不用干扰线,注释就行了;
li = ImageColorAllocate(im, 220, 220, 220);
for (i = 0; i < 3; i++) { //加入3条干扰线;也可以不要;视情况而定,因为可能影响用户输入;
    imageline(im, rand(0, 30) , rand(0, 21) , rand(20, 40) , rand(0, 21) , li);
}
//字符在图片的位置;
imagestring(im, 5, 8, 2, authnum_session, white);
for (i = 0; i < 90; i++) { //加入干扰象素
    imagesetpixel(im, rand() % 70, rand() % 30, gray);
} //开源代码phprm.com
ImagePNG(im);
ImageDestroy(im);
?>
로그인 후 복사

以上代码,参考了如下的文章,用php生成带有雪花背景的验证码.

2、调用验证码的页面 sessionValidate.php,代码如下:

<?php
session_start();
//在页首先要开启session,
//error_reporting(2047);
session_destroy();
//将session去掉,以每次都能取新的session值;
//用seesion 效果不错,也很方便
?> 
    <html> 
    <head> 
    <title>session 图片验证实例</title> 
    </head> 
    <body> 
    此例为session验证实例 
    <form action="" method="post"> 
    验证码:<input type="text" name="validate" value="" size=10> <img  src="checkNum_session.php" alt="PHP验证码生成与验证例子 " ><br> 
    <input type="submit"> 
    </form> 
    <?php
//打印上一个session;
echo "上一个session:<b>" . _SESSION["authnum_session"] . "</b><br>";
validate = "";
if (isset(_POST["validate"])) {
    validate = _POST["validate"];
    echo "您刚才输入的是:" . _POST["validate"] . "<br>状态:";
    if (validate != _SESSION["authnum_session"]) {
        //判断session值与用户输入的验证码是否一致;
        echo "<font color=red>输入有误</font>";
    } else {
        echo "<font color=green>通过验证</font>";
    }
}
/*
    //打印全部session; 
    PrintArr(_SESSION); 
    function PrintArr(aArray){ 
    echo &#39;<xmp>&#39;; 
    print_r(aArray); 
    echo &#39;</xmp>&#39;; 
    } 
*/
?>
로그인 후 복사


文章地址:

转载随意^^请带上本文地址!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!