驗證碼php
⑴ 我的php代碼中登陸界面加一個驗證碼,如何實現
php登陸頁面+驗證碼的實現,參考如下:
1、首先新建一個php站點;
⑵ php的驗證碼提示怎樣製作
一般製作驗證碼會按照下面的幾步走:
一:創建出來一個圖片,通常我們成為源,可以用imagecreatetruecolor()這個函數搞定
二:給這個源 添加背景色,同時設置文本顯示的顏色,GD庫函數為我們提供了imagecolorallocate()函數
三:材料弄好了,我們要給它添點內容了,就是我們隨機生成的數字或者字母,甚至可以是它們的組合,這里我們可以選擇兩個函數 imagettftext()、imagesrting(),這兩個函數的不同,我們會在後面講解。
例:
<?php
session_start();//開啟session,用來記錄獲得的驗證碼,這個函數要寫在程序的開頭,不然會出現錯誤
header(「Content-type :image/gif」);//把文件的返回類型設為image/gif格式,這個格式可以輸出圖片
$codelen=4;//設置你要讓用戶輸入字元的個數,一般為4,過長用戶體驗不好。
$charset =」ABCDEFGHKLMNPRSTUVWYZ23456789″;//我們可以盡量把一些難以辨認的字元去掉,比如阿拉伯數字0和字母o,這也是提高用戶體驗的一種方法。
$code =」;
for($i=0;$i<$codelen;$i++){//用for循環得到4個隨機的字元,在這里用到了mt_rand,這個函數比rand的效率要高的多,建議大家用這個
$code .=$charset{mt_rand(0,strlen($charset)-1)};
}
$_SESSION['code']=$code;//下篇關於session驗證的文章將會用到
$width = 80;
$height = 40;
$im = imagecreatetruecolor($width,$height);//用imagecreatetruecolor()函數來建立一個新的圖片,裡面的兩個數值分別是寬度和高度,這是製作驗證碼的第一步
$bg = imagecolorallocate($im,255,255,0); //圖片背景的顏色,這里是第二步
$textcolor = imagecolorallocate($im,255,0,0);//文字的顏色
imagefill($im,0,0,$bg);//給圖片填充背景色
//好了上面的鋪墊任務做的差不多了,現在關鍵就是讓字元顯示在圖片上,這里有兩種方法我們一一介紹。
$font =」ggbi.ttf」;//如果你有字體的話 就填上字體的相對路徑,如果沒有就留空。下面的兩個用法我會一一講解。
if($font!==」"){
for($num=0;$num<4;$num++){
imagettftext($im,mt_rand(12,16),(mt_rand(0,75)+330)%360,5+15*$num,20+mt_rand(2,5),$textcolor,$font,$code[$num]);//這里是第三步
}
}
else{
for($num=0;$num<4;$num++){
imagestring($im,5,10+15*$num,10+mt_rand(0,5),$code[$num],$textcolor);
}
}
header(「Content-type: image/jpeg」);
imagejpeg($im);
?>
⑶ php驗證碼怎麼使用
把以上代碼保存成code.php,上傳到相應目錄,如網站根目錄 調用的時候 <img src="code.php"> 即可
⑷ php圖片驗證碼實現
可以用php的GD庫做
//隨機生成驗證碼
class randomString
{
function createRandomStr($strLen)
{
list($usec, $sec) = explode(' ', microtime());
(float) $sec + ((float) $usec * 100000);
$number = '';
$number_len = $strLen;
$stuff = '';//附加碼顯示範圍ABCDEFGHIJKLMNOPQRSTUVWXYZ
$stuff_len = strlen($stuff) - 1;
for ($i = 0; $i < $number_len; $i++) {
$number .= substr($stuff, mt_rand(0, $stuff_len), 1);
}
return $number;
}
}
通過ZD庫將驗證碼變成圖片
$number = $createStr->createRandomStr('4');//驗證碼的位數
$number_len = strlen($number);
$_SESSION["VERIFY_CODE"] = $number;
// 生成驗證碼圖片
$img_width = 60;
$img_height = 20;
$img = imageCreate($img_width, $img_height);
ImageColorAllocate($img, 0x6C, 0x74, 0x70);
$white = ImageColorAllocate($img, 0xff, 0xff, 0xff);
$ix = 6;
$iy = 2;
for ($i = 0; $i < $number_len; $i++) {
imageString($img, 5, $ix, $iy, $number[$i], $white);
$ix += 14;
}
for($i=0;$i<200;$i++) //加入干擾象素
{
$randcolor = ImageColorallocate($img,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($img, rand()%100 , rand()%50 , $randcolor);
}
// 輸出圖片
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
imagepng($img);
imagedestroy($img);
⑸ php你的驗證碼安全碼
驗證碼的作用主要有防止暴力破解,防止惡意灌水,防止自動提交等,在這里我就不多說了。驗證碼的類型也有數字、字母等,甚至厲害點的還有中文的。但是不管你的驗證碼多麼厲害,只要你在表單驗證中存在如下的失誤,你的驗證碼就形同虛設!
驗證碼的一般思路,就是每次登陸的地方訪問一個腳本文件,該文件生成含驗證碼的圖片並將值寫入到Session里,提交的時候驗證登陸的腳本就會判斷提交的驗證碼是否與Session里的一致。
問題出現了,在登陸密碼錯誤之後,我們不去訪問生成驗證圖片的文件,那麼如果Session中的驗證碼沒有被清空,此時驗證碼就是跟上次的一樣,辛辛苦苦構建的驗證碼機制就形同虛設了。
下面我們先來看一段有問題的代碼:
登陸部分:
CODE:
<tr>
<td>管理員姓名:
⑹ php驗證碼解析
同學 具體那看不明白請說
東西太多 不能一一解釋
<?php
//產生隨機變形隨機碼
session_start();;/* 開啟SESSION 以便其他頁面對驗證碼進行驗證*/
$authnum=random(4);//種子
Header("Content-type: image/PNG"); //古例,改不得
$im = imagecreate(55,18); //imagecreate() 新建圖像,大小為 x_size 和 y_size 的空白圖像。
$red = ImageColorAllocate($im, 52,24,128); //設置背景顏色
$white = ImageColorAllocate($im, 65,223,224);//設置文字顏色
$gray = ImageColorAllocate($im, 0,0,0); //設置雜點顏色
imagefill($im,55,18,$red);
for ($i = 0; $i < strlen($authnum); $i++)
{
imagestring($im, 6, 13*$i+4, 1, substr($authnum,$i,1), $white);
}
for($i=0;$i<50;$i++) imagesetpixel($im, rand()%55 , rand()%48 , $gray); //加入干擾象素
ImagePNG($im); //以 PNG 格式將圖像輸出到瀏覽器或文件
ImageDestroy($im);//銷毀一圖像
$authnum=strtolower($authnum);
$_SESSION['code']=$authnum /* 把驗證碼的內容賦值給SESSION 以便其他頁面驗證*/
//產生隨機數的函數
function random($length) /* 產生隨機數字或者字母 */
{
$hash = '';
$chars = '';
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash; //又來
}
?>
⑺ php 怎麼獲取驗證碼的值
$_SESSION["vcode"] = $vcode;
驗證碼的值就在 $_SESSION["vcode"] 裡面。
⑻ php驗證碼判斷
session_start();
$str_number = trim($_POST['number']);
if(strtolower($_SESSION['rand'])==strtolower($str_number )){
echo "驗證碼正確";
}else{
echo "驗證碼不正確";
}
最好加strtolower函數轉換下大小寫,這樣子,用戶在輸入時就不用區分大小寫了。不然用戶體驗會很麻煩,這是我個人理解。
⑼ PHP驗證碼輸出
function getRandCode(){
$code="";
$string="";
for($i=0;$i<4;$i++){
$string.=$code{rand(0,strlen($code)-1)};
}
return $string;
}
存在這個$string中!!你直接把它弄成個全局的 輸出下!或者存到session中也可以
⑽ 如何用PHP生成驗證碼
php生成驗證碼,php驗證碼,php怎樣生成驗證碼?
工具/原料
這個驗證碼較實用,大家可以應用到項目中。
方法/步驟
1.
<?php
/*設置文件頭為圖片輸出*/
Header("Content-type:image/JPEG");
/*調用生成驗證碼函數*/
$checkcode=make_rand(4);
/**
*生成驗證碼字元
*@paramint$length驗證碼字元長度
*@returnstring
*/
functionmake_rand($length="32"){
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$result="";
for($i=0;$i<$length;$i++){
$num[$i]=rand(0,25);
$result.=$str[$num[$i]];
}
return$result;
}
2.
/*調用輸出驗證碼圖片函數*/
getAuthImage($checkcode,160,40);
/**
*生成驗證碼圖片
*@paramstring$text驗證碼字元
*/
functiongetAuthImage($text,$w,$y){
/*設置圖片的寬度和高度*/
$im_x=$w;
$im_y=$y;
/*創建圖片*/
$im=imagecreatetruecolor($im_x,$im_y);
$text_c=ImageColorAllocate($im,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
$tmpC0=mt_rand(100,255);
$tmpC1=mt_rand(100,255);
$tmpC2=mt_rand(100,255);
$buttum_c=ImageColorAllocate($im,$tmpC0,$tmpC1,$tmpC2);
imagefill($im,16,13,$buttum_c);
3.
/*字體文件*/
$font='t1.ttf';
for($i=0;$i<strlen($text);$i++)
{
$tmp=substr($text,$i,1);
$array=array(-1,1);
$p=array_rand($array);
$an=$array[$p]*mt_rand(1,10);//角度
$size=28;
imagettftext($im,$size,$an,15+$i*$size,35,$text_c,$font,$tmp);
}
/*將字元寫入文件中*/
$distortion_im=imagecreatetruecolor($im_x,$im_y);
imagefill($distortion_im,16,13,$buttum_c);
for($i=0;$i<$im_x;$i++){
for($j=0;$j<$im_y;$j++){
$rgb=imagecolorat($im,$i,$j);
if((int)($i+20+sin($j/$im_y*2*M_PI)*10)<=imagesx($distortion_im)&&(int)($i+20+sin($j/$im_y*2*M_PI)*10)>=0){
imagesetpixel($distortion_im,(int)($i+10+sin($j/$im_y*2*M_PI-M_PI*0.1)*4),$j,$rgb);
}
}
}
4.
/*干擾元素點的數量*/
$count=160;
/*創建干擾元素點*/
for($i=0;$i<$count;$i++){
$randcolor=ImageColorallocate($distortion_im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($distortion_im,mt_rand()%$im_x,mt_rand()%$im_y,$randcolor);
}
/*創建干擾線條*/
$rand=mt_rand(5,30);
$rand1=mt_rand(15,25);
$rand2=mt_rand(5,10);
for($yy=$rand;$yy<=+$rand+2;$yy++){
for($px=-80;$px<=80;$px=$px+0.1)
{
$x=$px/$rand1;
if($x!=0)
{
$y=sin($x);
}
$py=$y*$rand2;
imagesetpixel($distortion_im,$px+80,$py+$yy,$text_c);
}
}
5.
/*以PNG格式將圖像輸出到瀏覽器*/
ImagePNG($distortion_im);
/*銷毀圖像*/
ImageDestroy($distortion_im);
ImageDestroy($im);