验证码是一个现在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('验证码错误!');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='../images/yzm/" . $num".gif'/ 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 = ''; str = 'abcdefghijkmnpqrstuvwxyz1234567890'; //定义用来显示在图片上的数字和字母; 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 '<xmp>'; print_r(aArray); echo '</xmp>'; } */ ?>
文章地址:
转载随意^^请带上本文地址!