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分钟内有效如何做
把验证码生成的时候写入数据库,包含当前时间。提交的时候做判断用提交的时间减去生成的时间。超过提示无效。