驗證碼是一個現在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/>";}
?>
1.2 驗證過程
代碼如下 復制代碼 if (strval($inputyzm)!=strval($num))
{
echo "<script>alert('驗證碼錯誤!');history.go(-1);</script>";
exit;
}
2 一個漢字的驗證碼實例
2.1 顯示驗證碼的圖片
代碼如下 復制代碼 <?php
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
代碼如下 復制代碼 <?
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);
}
ImagePNG(im);
ImageDestroy(im);
?>
以上代碼,參考了如下的文章:
php圖片驗證碼
php生成驗證碼的例子
用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"><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>';
}
*/
?>