php生成的驗證碼
❶ php里有沒有生成驗證碼的函數
html文件test.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<body>
<table>
<tr>
<td height="40" align="right"><font color="#0057AE">驗證碼:</font></td>
<td><input type="text" id="verifycode" name="verifycode" title="請輸入驗證碼" style='width:80px;padding-bottom:2px;padding-left:3px;line-height:22px;margin:0px auto;' tabindex="3"/>
<img id='codeimg' src="verifycode.php" align='absmiddle' style="border:#CCCCCC 1px solid; cursor:pointer;" onClick="this.src='verifycode.php?'+Math.ceil(Math.random()*1000);" alt='點擊重新獲取驗證碼' width="50" height="20"></td>
</tr>
</table>
</body>
</html>
php文件:verifycode.php,用於生成圖片
<?php
session_start();
// 建立一幅 100X30 的圖像
$im = imagecreate(50, 16);
$bg = imagecolorallocate($im, 255, 255, 255); //白色背景
$pattern = ''; //字元池
// 把字元串寫在圖像左上角
for($i=0;$i<4;$i++)
{
//$text= $pattern{rand(0,61)}; //生成隨機數
$text= $pattern{rand(0,9)}; //只生成字元池前面十個字元,即數字
$textcolor = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); //字體隨機顏色
imagestring($im, 5, 2+$i*12, $i*rand(0,1), $text, $textcolor); //生成圖片
$vcodes.= $text;
}
for($i=0;$i<100;$i++) //加入干擾象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand(0,100) , rand(0,30) , $randcolor);
}
// 輸出圖像
header("Content-type: image/png");
imagepng($im);
$_SESSION['VCODE'] = $vcodes;
?>
具體的代碼里都有解釋,自己再改一改就行了。判斷是否相等,只要取輸入框里的值跟$_SESSION['VCODE']對比一下就行了
❷ php中生成圖片驗證碼問題
找到原因了:$rand變數沒有初始化,直接輸出時會有警告。解決辦法是在for語句之前加上$rand='';這樣就沒問題了。
session_start();
$rand='';
for($i=0;$i<4;$i++){
$rand.=dechex(rand(0,15));
}
$_SISSION['rand']=$rand;
$bg=imagecreatetruecolor(100,30);
$im=imagecolorallocate($bg,0,0,0);
$color=imagecolorallocate($bg,255,255,255);
imagestring($bg,5,0,0,$rand,$color);
header("Content-type: image/jpeg");
imagejpeg($bg);
❸ 怎麼讓php生成的驗證碼隨機數不重復
如果要生成四位數字的驗證碼,則可以用函數: $srand = rand(1000,9999); 會生成在1000到9999之間的隨機數字,如果要生成更多位數的數字,可以更改最孝最大值。
❹ 關於PHP生成驗證碼圖片的問題
header("content-type: image/jpeg");
因為你程序里有這句
驗證碼不是你這么用的,是這樣用的
<img src="生成驗證碼的php文件">
❺ 請問PHP生成驗證碼的類怎麼寫
<?php
classCode{
//1.定義各個成員有寬、高、畫布、字數、類型、畫類型
private$width;//寬度
private$height;//高度
private$num;//驗證碼字數
private$imgType;//生成圖片類型
private$Type;//字串類型1,2,3三個選項1純數字2純小寫字母3大小寫數字混合
private$hb;//畫布
public$codestr;//驗證碼字串
publicfunction__construct($height=20,$num=4,$imgType="jpeg",$Type=1){
$this->width=$num*20;
$this->height=$height;
$this->num=$num;
$this->imgType=$imgType;
$this->Type=$Type;
$this->codestr=$this->codestr();
$this->zuhe();
}
//2.定義隨機獲取字元串函數
privatefunctioncodestr(){
switch($this->Type){
case1://類型為1獲取1-9隨機數
$str=implode("",array_rand(range(0,9),$this->num));
break;
case2://類型為2獲取a-z隨機小寫字母
$str=implode("",array_rand(array_flip(range(a,z)),$this->num));
break;
case3://類型為3獲取數字,小寫字母,大寫字母混合
for($i=0;$i<$this->num;$i++){
$m=rand(0,2);
switch($m){
case0:
$o=rand(48,57);
break;
case1:
$o=rand(65,90);
break;
case2:
$o=rand(97,122);
break;
}
$str.=sprintf("%c",$o);
}
break;
}
return$str;
}
//3.初始化畫布圖像資源
privatefunctionHb(){
$this->hb=imagecreatetruecolor($this->width,$this->height);
}
//4.生成背景顏色
privatefunctionBg(){
returnimagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));
}
//5.生成字體顏色
privatefunctionFont(){
returnimagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));
}
//6.填充背景顏色
privatefunctionBgColor(){
imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());
}
//7.干擾點
privatefunctionganrao(){
$sum=floor(($this->width)*($this->height)/3);
for($i=0;$i<$sum;$i++){
imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());
}
}
//8.隨機直線弧線
privatefunctionhuxian(){
for($i=0;$i<$this->num;$i++){
imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());
}
}
//9.寫字
privatefunctionxiezi(){
for($i=0;$i<$this->num;$i++){
$x=ceil($this->width/$this->num)*$i;
$y=rand(1,$this->height-15);
imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
}
}
//10.輸出
privatefunctionOutImg(){
$shuchu="image".$this->imgType;
$header="Content-type:image/".$this->imgType;
if(function_exists($shuchu)){
header($header);
$shuchu($this->hb);
}else{
exit("GD庫沒有此類圖像");
}
}
//11.拼裝
privatefunctionzuhe(){
$this->Hb();
$this->BgColor();
$this->ganrao();
$this->huxian();
$this->xiezi();
$this->OutImg();
}
publicfunctiongetCodeStr(){
return$this->codestr;
}
}
$a=newCode();
$a->getCodeStr();
?>
❻ 如何生成這樣的驗證碼 - PHP進階討論
謝謝兩位的回答,驗證碼生成程序我知道怎麼寫,利用字體我也考慮過,但是我找不到這樣的字體,我覺得是通過程序控制的,但是嘗試了很久達不到這樣的效果,在網上也搜到不少關於驗證碼的,但是都只是限於最簡單,最初級的,所以才想到來此求助,還希望大家指點指點:) 查看原帖>>
❼ 怎麼用php生成圖像,生成驗證碼
<?php
//驗證碼類
classValidateCode{
private$charset='';//隨機因子
private$code;//驗證碼
private$codelen=4;//驗證碼長度
private$width=90;//寬度
private$height=40;//高度
private$img;//圖形資源句柄
private$font;//指定的字體
private$fontsize=20;//指定字體大小
private$fontcolor;//指定字體顏色
//構造方法初始化
publicfunction__construct(){
$this->font=dirname(__FILE__).'/font/elephant.ttf';//注意字體路徑要寫對,否則顯示不了圖片
}
//生成隨機碼
privatefunctioncreateCode(){
$_len=strlen($this->charset)-1;
for($i=0;$i<$this->codelen;$i++){
$this->code.=$this->charset[mt_rand(0,$_len)];
}
}
//生成背景
privatefunctioncreateBg(){
$this->img=imagecreatetruecolor($this->width,$this->height);
$color=imagecolorallocate($this->img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}
//生成文字
privatefunctioncreateFont(){
$_x=$this->width/$this->codelen;
for($i=0;$i<$this->codelen;$i++){
$this->fontcolor=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height/1.4,$this->fontcolor,$this->font,$this->code[$i]);
}
}
//生成線條、雪花
privatefunctioncreateLine(){
//線條
for($i=0;$i<6;$i++){
$color=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//雪花
for($i=0;$i<100;$i++){
$color=imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
}
//輸出
privatefunctionoutPut(){
header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
//對外生成
publicfunctiondoimg(){
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
}
//獲取驗證碼
publicfunctiongetCode(){
returnstrtolower($this->code);
}
}
❽ 怎麼樣能夠讓php生成4位數字驗證碼
PHP生成驗證碼的原理:使用PHP的GD庫,生成一張帶驗證碼的圖片,並將驗證碼保存在Session中。PHP生成驗證碼的大致流程有: 1、產生一張png的圖片; 2、為圖片設置背景色; 3、設置字體顏色和樣式; 4、產生4位數的隨機的驗證碼; 5、把產生的每...
❾ php 下面的驗證碼怎麼做
干擾像素其實就是一定演算法生成的隨機點。這個不會每張圖片都一樣的,那樣就有規律可循了,容易被破解。
❿ php生成的驗證碼10分鍾內有效如何做
把驗證碼生成的時候寫入資料庫,包含當前時間。提交的時候做判斷用提交的時間減去生成的時間。超過提示無效。