Home  >  Article  >  php教程  >  PHP验证码生成与验证例子

PHP验证码生成与验证例子

WBOY
WBOYOriginal
2016-05-25 16:41:37844browse

验证码是一个现在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;; 
    } 
*/
?>


文章地址:

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn