導航:首頁 > 編程語言 > php驗證碼干擾線

php驗證碼干擾線

發布時間:2023-01-11 13:36:17

php怎麼實現驗證碼的

驗證碼功能機制實現思路

  1. 常規的驗證碼實現:

    a、產生一張png的圖片


    b、為圖片設置背景色


    c、設置字體顏色和樣式


    d、產生4位數的隨機的驗證碼


    e、把產生的每個字元調整旋轉角度和位置畫到png圖片上


    f、加入噪點和干擾線防止注冊機器分析原圖片來惡意注冊


    g、輸出圖片


    h、釋放圖片所佔內存


    i、將驗證碼保存到session或是資料庫


    j、將和輸入的驗證碼進行對比

  2. 簡訊(郵箱)驗證碼機制:

    a、產生4-6位數的隨機的驗證碼


    b、把產生的每個字元保存到session或是資料庫


    c、將驗證碼發送到用戶的手機(郵箱)


    d、用戶在規定時間內進行輸入


    e、將驗證碼從session或是資料庫中取出


    f、將和輸入的驗證碼進行對比驗證

❷ 求 PHP 圖片驗證碼類 給出詳細調用方法 謝謝!!!

[code.php]

<?php

/**

*驗證碼圖片

*/

session_start();

Header("Content-type:image/gif");

/*

*初始化

*/

$border=0;//是否要邊框1要:0不要

$how=4;//驗證碼位數

$w=$how*15;//圖片寬度

$h=20;//圖片高度

$fontsize=10;//字體大小

$alpha="abcdefghijkmnpqrstuvwxyz";//驗證碼內容1:字母

$number="23456789";//驗證碼內容2:數字

$randcode="";//驗證碼字元串初始化

srand((double)microtime()*1000000);//初始化隨機數種子

$im=ImageCreate($w,$h);//創建驗證圖片

/*

*繪制基本框架

*/

$bgcolor=ImageColorAllocate($im,255,255,255);//設置背景顏色

ImageFill($im,0,0,$bgcolor);//填充背景色

if($border)

{

$black=ImageColorAllocate($im,0,0,0);//設置邊框顏色

ImageRectangle($im,0,0,$w-1,$h-1,$black);//繪制邊框

}

/*

*逐位產生隨機字元

*/

for($i=0;$i<$how;$i++)

{

$alpha_or_number=mt_rand(0,1);//字母還是數字

$str=$alpha_or_number?$alpha:$number;

$which=mt_rand(0,strlen($str)-1);//取哪個字元

$code=substr($str,$which,1);//取字元

$j=!$i?4:$j+15;//繪字元位置

$color3=ImageColorAllocate($im,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));//字元隨即顏色

ImageChar($im,$fontsize,$j,3,$code,$color3);//繪字元

$randcode.=$code;//逐位加入驗證碼字元串

}

/*

*如果需要添加干擾就將注釋去掉

*

*以下for()循環為繪背景干擾線代碼

*/

/*+-------------------------------繪背景干擾線開始--------------------------------------------+*/

for($i=0;$i<5;$i++)//繪背景干擾線

{

$color1=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//干擾線顏色

ImageArc($im,mt_rand(-5,$w),mt_rand(-5,$h),mt_rand(20,300),mt_rand(20,200),55,44,$color1);//干擾線

}

/*+-------------------------------繪背景干擾線結束--------------------------------------+*/

/*

*如果需要添加干擾就將注釋去掉

*

*以下for()循環為繪背景干擾點代碼

*/

/*+--------------------------------繪背景干擾點開始------------------------------------------+*/

/*

for($i=0;$i<$how*40;$i++)//繪背景干擾點

{

$color2=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//干擾點顏色

ImageSetPixel($im,mt_rand(0,$w),mt_rand(0,$h),$color2);//干擾點

}

*/

/*+--------------------------------繪背景干擾點結束------------------------------------------+*/

//把驗證碼字元串寫入session方便提交登錄信息時檢驗驗證碼是否正確例如:$_POST['randcode']=$_SESSION['randcode']

$_SESSION['randcode']=$randcode;

/*繪圖結束*/

Imagegif($im);

ImageDestroy($im);

/*繪圖結束*/

?>

[調用方法]

<SCRIPTLANGUAGE="JavaScript">

<!--

functionreloadcode(){

vard=newDate();

document.getElementById('safecode').src="/code.php?t="+d.toTimeString()

}

//-->

</SCRIPT>

驗證碼:<inputname="chknumber"type="text"maxlength="4"class="chknumber_input"/><imgsrc='code.php'id="safecode"onclick="reloadcode()"title="看不清楚?點擊切換!"></img>

❸ 如何用PHP生成驗證碼

PHP生成驗證碼的原理:使用PHP的GD庫,生成一張帶驗證碼的圖片,並將驗證碼保存在Session中。PHP生成驗證碼的大致流程有:

1、產生一張png的圖片;

2、為圖片設置背景色;

3、設置字體顏色和樣式;

4、產生4位數的隨機的驗證碼;

5、把產生的每個字元調整旋轉角度和位置畫到png圖片上;

6、加入噪點和干擾線防止注冊機器分析原圖片來惡意破解驗證碼;

7、輸出圖片;

8、釋放圖片所佔內存。

session_start();
getCode(4,60,20);

functiongetCode($num,$w,$h){
$code="";
for($i=0;$i<$num;$i++){
$code.=rand(0,9);
}
//4位驗證碼也可以用rand(1000,9999)直接生成
//將生成的驗證碼寫入session,備驗證時用
$_SESSION["helloweba_num"]=$code;
//創建圖片,定義顏色值
header("Content-type:image/PNG");
$im=imagecreate($w,$h);
$black=imagecolorallocate($im,0,0,0);
$gray=imagecolorallocate($im,200,200,200);
$bgcolor=imagecolorallocate($im,255,255,255);
//填充背景
imagefill($im,0,0,$gray);

//畫邊框
imagerectangle($im,0,0,$w-1,$h-1,$black);

//隨機繪制兩條虛線,起干擾作用
$style=array($black,$black,$black,$black,$black,
$gray,$gray,$gray,$gray,$gray
);
imagesetstyle($im,$style);
$y1=rand(0,$h);
$y2=rand(0,$h);
$y3=rand(0,$h);
$y4=rand(0,$h);
imageline($im,0,$y1,$w,$y3,IMG_COLOR_STYLED);
imageline($im,0,$y2,$w,$y4,IMG_COLOR_STYLED);

//在畫布上隨機生成大量黑點,起干擾作用;
for($i=0;$i<80;$i++){
imagesetpixel($im,rand(0,$w),rand(0,$h),$black);
}
//將數字隨機顯示在畫布上,字元的水平間距和位置都按一定波動范圍隨機生成
$strx=rand(3,8);
for($i=0;$i<$num;$i++){
$strpos=rand(1,6);
imagestring($im,5,$strx,$strpos,substr($code,$i,1),$black);
$strx+=rand(8,12);
}
imagepng($im);//輸出圖片
imagedestroy($im);//釋放圖片所佔內存
}

❹ 那位高人能告訴小女在用php GD庫做驗證碼的時候怎樣加入干擾線啊,注意不是直線啊,是那種曲線啊

這段代碼你可以看看,自己原創的哦,
<?php
$im = ImageCreate(200,200);

$red = ImageColorAllocate($im,0xFF,0x00,0x00);
$black = ImageColorAllocate($im,0x00,0x00,0x00);
$white = ImageColorAllocate($im,0xFF,0xFF,0xFF);
$ys1 = ImageColorAllocate($im,0xE9,0xB1,0x50);
$ys2 = ImageColorAllocate($im,0x98,0x25,0xCB);
$ys3 = ImageColorAllocate($im,0x40,0x88,0x47);

ImageFilledRectangle($im,50,50,150,150,$black);
//點
for($i=0;$i<300;$i++){
ImageSetPixel($im,rand(1,200),rand(1,200),$white);
}
//虛線
for($i=0;$i<10;$i++){
ImageDashedLine($im,rand(1,200),rand(1,200),rand(1,200),rand(1,200),$ys1);
}
//線
for($i=0;$i<10;$i++){
ImageLine($im,rand(1,200),rand(1,200),rand(1,200),rand(1,200),$ys1);
}
//矩形框
for($i=0;$i<3;$i++){
ImageRectangle($im,rand(1,200),rand(1,200),rand(1,200),rand(1,200),$ys1);
}
//矩形面
for($i=0;$i<2;$i++){
ImageFilledRectangle($im,rand(1,200),rand(1,200),rand(1,200),rand(1,200),$ys1);
}
//多邊形
$point = array(rand(1,200),rand(1,200),rand(1,200),rand(1,200),rand(1,200),rand(1,200));
ImagePolygon($im,$point,count($point)/2,$ys2);
ImageFilledPolygon($im,$point,count($point)/2,$ys2);
//弧線
ImageArc($im,rand(20,180),rand(20,180),rand(50,150),rand(50,150),rand(0,360),rand(0,360),$ys3);
//打字
ImageString($im,4,20,30,"add word",$ys3);
//ImageTTFText($im,30,0,rand(0,50),rand(30,200),$ys3,'msyhbd.ttf',"添加文字");

header('Content-Type:image/png');
ImagePNG($im);
?>

❺ 寫了一個php驗證碼,單獨運行可以,引用就顯示錯誤

你應該這樣用:

checkcode.php:

<?php
//畫出驗證碼
$checkCode="";
for($i=0;$i<4;$i++){
$checkCode.=dechex(rand(1,15));
}
//創建畫布
$image=imagecreatetruecolor(110,30);
//存入session
session_start();
$_SESSION['checkcode']=$checkCode;
//設置顏色
$red=imagecolorallocate($image,255,255,255);
//畫出干擾線
for($i=0;$i<20;$i++){
imageline($image,rand(0,110),rand(0,110),rand(0,30),rand(0,30),imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)));
}
imagestring($image,rand(5,8),rand(0,60),rand(0,10),$checkCode,$red);
//輸出到頁面
ob_clean();
header("content-type:image/png");

imagepng($image);
//銷毀圖片
imagedestroy($image);
?>

test.php:

顯示驗證碼<imgsrc="checkcode.php"/>

❻ PHP圖形驗證碼識別

<?php
Header("Content-type: image/gif");
/*
* 初始化
*/
$border = 0; //是否要邊框 1要:0不要
$how = 4; //驗證碼位數
$w = $how*15; //圖片寬度
$h = 20; //圖片高度
$fontsize = 5; //字體大小
$alpha = "abcdefghijkmnopqrstuvwxyz"; //驗證碼內容1:字母
$number = "023456789"; //驗證碼內容2:數字
$randcode = ""; //驗證碼字元串初始化
srand((double)microtime()*1000000); //初始化隨機數種子

$im = ImageCreate($w, $h); //創建驗證圖片

/*
* 繪制基本框架
*/
$bgcolor = ImageColorAllocate($im, 255, 255, 255); //設置背景顏色
ImageFill($im, 0, 0, $bgcolor); //填充背景色
if($border)
{
$black = ImageColorAllocate($im, 0, 0, 0); //設置邊框顏色
ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//繪制邊框
}

/*
* 逐位產生隨機字元
*/
for($i=0; $i<$how; $i++)
{
$alpha_or_number = mt_rand(0, 1); //字母還是數字
$str = $alpha_or_number ? $alpha : $number;
$which = mt_rand(0, strlen($str)-1); //取哪個字元
$code = substr($str, $which, 1); //取字元
$j = !$i ? 4 : $j+15; //繪字元位置
$color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字元隨即顏色
ImageChar($im, $fontsize, $j, 3, $code, $color3); //繪字元
$randcode .= $code; //逐位加入驗證碼字元串
}

/*
* 添加干擾
*/
for($i=0; $i<5; $i++)//繪背景干擾線
{
$color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干擾線顏色
ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干擾線
}
for($i=0; $i<$how*40; $i++)//繪背景干擾點
{
$color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干擾點顏色
ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干擾點
}

//把驗證碼字元串寫入session
//session_start();
//$_SESSION['randcode'] = $randcode;
//把驗證碼字元寫入COOKIE
setcookie( "randcode", $randcode, (time() + 3600*24*30), "/" );
/*繪圖結束*/
Imagegif($im);
ImageDestroy($im);
/*繪圖結束*/
?>

❼ php驗證碼怎麼在前from表單驗證呢請大師請教,謝謝

  1. 把驗證碼的值當作一個參數存在html表單/ajax表單中(如,以vcode命名增加一個hiden text);

  2. 在控制器接收表單的邏輯,接收$_POST['vcode'],判斷$_POST['vcode']是不是生成的驗證碼,是,跳過,不是返回驗證碼錯誤到表單頁面;

  3. 其實驗證就類似介面一樣,雙方約定規則,統一密鑰,而驗證只是你自己去驗證罷了

❽ 我的php代碼中登陸界面加一個驗證碼,如何實現

php登陸頁面+驗證碼的實現,參考如下:

1、首先新建一個php站點;

❾ php中如何使用隨機函數rand()生成一個數字驗證碼

如果要生成四位數字的驗證碼,則可以用函數:

$srand = rand(1000,9999);

會生成在1000到9999之間的隨機數字,如果要生成更多位數的數字,可以更改最小、最大值。

❿ php 下面的驗證碼怎麼做

干擾像素其實就是一定演算法生成的隨機點。這個不會每張圖片都一樣的,那樣就有規律可循了,容易被破解。

閱讀全文

與php驗證碼干擾線相關的資料

熱點內容
怎麼升級手機android 瀏覽:922
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:495
軟考初級程序員大題分值 瀏覽:473
js壓縮視頻文件 瀏覽:578
linux如何通過命令創建文件 瀏覽:989
應用加密app還能訪問應用嘛 瀏覽:433
安卓怎麼用支付寶交違章罰款 瀏覽:665
php面向對象的程序設計 瀏覽:504
數據挖掘演算法書籍推薦 瀏覽:894
投訴聯通用什麼app 瀏覽:151
web伺服器變更ip地址 瀏覽:955
java正則表達式驗證郵箱 瀏覽:362
成熟商務男裝下載什麼軟體app 瀏覽:610
加密2h代表長度是多少厘米 瀏覽:23
拍賣程序員 瀏覽:103
電腦的圖片放在哪個文件夾 瀏覽:276
unsignedintjava 瀏覽:218
編譯器下載地址 瀏覽:44