程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP驗證碼生成與驗證例子

PHP驗證碼生成與驗證例子

編輯:關於PHP編程

驗證碼是一個現在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
    $str="漢","字","驗","證","碼"); //可以定義漢字的內容和個數
    $word=strlen($str));
    for ($i=0;$i<4;$i++)
    {
    $num=rand(0,$word);
    $img = $img."<img src='../images/yzm/".$num".gif'/>";
    $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

 代碼如下 復制代碼

    <?
    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>';
    }
    */
    ?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved