在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就可以了。
方法一
代码如下 | 复制代码 |
$authnum=''; |
方法二:
代码如下 | 复制代码 |
private function createCheckCode() { for(i=0;i { number = rand(0,2); switch(number) { case 0: rand_number = rand(48,57); break;//数字 case 1: rand_number = rand(65,90);break;//大写字母 case 2: rand_number = rand(97,122);break;//小写字母 } $asc = sprintf("%c",rand_number); $asc_number = asc_number.asc; } return asc_number; } |
方法三:
代码如下 | 复制代码 |
srand(microtime()*100000);//相当于计时器 $string="abcdefghigklmnopqrstuvwxyz123456789"; for($i=0;$i { $new_number.=$string[rand(0,strlen($string)-1)];//随即的产生一个数组 } |
方法四:
代码如下 | 复制代码 |
for($i=0;$i
{
|
随机生成数字,字母的代码:
代码如下 | 复制代码 |
//che.php session_start(); for($i=0;$i { $rand.=dechex(rand(1,15)); } $_SESSION['check_num']=$rand; $image=imagecreatetruecolor(50,30); $bg=imagecolorallocate($im,0,0,0);//第一次用调色板的时候,背景颜色 $te=imagecolorallocate($im,255,255,255); imagestring($image,6,rand(0,20),rand(0,2),$rand,$te); ob_clean();//PHP网页中因为 要生成验证码而出现 图像"http://localhost/**.php"因其本身有错无法显示 header("Content-type:image/jpeg"); imagejpeg($image); ?> |
给图片画出干扰线代码:
代码如下 | 复制代码 |
for($i=0;$i
{ $cg=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));//产生随机的颜色 imageline($im,rand(10,40),0,rand(10,40),20,$cg); } |
给图片画出干扰点的代码:
代码如下 | 复制代码 |
for($i=0;$i
{ imagesetpixel($im,rand(0,40),rand(0,20),$cg); } |
把文字写入图片代码:
代码如下 | 复制代码 |
$str=array('我','我','亲','亲');//存储显示的汉字 //$str=iconv("gb2312","utf-8",$str); //汉字编码转化,我的好像不需要 |
最后我们结合实际分享一个完整的实例
代码如下 | 复制代码 |
/** * 生成验证码图片 * * @param String $word 验证码在session中的变量名称 */ function valiCode($word='randcode'){ Header("Content-type: image/gif"); $border = 0; //是否要边框 1要:0不要 $how = 4; //验证码位数 $w = $how*15; //图片宽度 $h = 18; //图片高度 $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 { $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 { $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 { $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[$word] = $randcode; /*绘图结束*/ Imagegif($im); ImageDestroy($im); /*绘图结束*/ } |
调用方法也很简单把上面实例保存img.php文件,然后在要调用的页面
html页面如下
代码如下 | 复制代码 |
这要就可以实现验证码调用了。
再加个提交验证验证码是否正确
代码如下 | 复制代码 |
session_start(); ?> |
这要就我们完成了从生成验证码图片和使用的整个过程了,也算是从php入门到精通验证码全部讲了。