温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP如何生成图像验证码

发布时间:2021-08-30 15:40:51 阅读:134 作者:小新 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

小编给大家分享一下PHP如何生成图像验证码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体如下:

1、生成加法运算验证码图片

session_start ();
/*定义头文件为图片*/
header("Content-type: image/png");
/*生成验证码*/
/*创建图片设置字体颜色*/
$im imagecreate($w$h);
$red imagecolorallocate($im255255255);
$white imagecolorallocate($im255255255);
/*随机生成两个数字*/
$num1 rand(120);
$num2 rand(120);
$_SESSION ["administratorConfirmCode"] = $num1+$num2;
/*设置图片背景颜色*/
$gray imagecolorallocate($im118151199);
$black imagecolorallocate($immt_rand(0100), mt_rand(0100), mt_rand(0100));
/*创建图片背景*/
imagefilledrectangle($im0010024$black);
/*在画布上随机生成大量点*/
for ($i 0$i 80$i++) {
  imagesetpixel($imrand(0$w), rand(0$h), $gray);
}
/*将计算验证码写入到图片中*/
imagestring($im554$num1$red);
imagestring($im5303"+"$red);
imagestring($im5454$num2$red);
imagestring($im5703"="$red);
imagestring($im5802"?"$white);
/*输出图片*/
imagepng($im);
imagedestroy($im);

2、生成字符验证码图片【值得注意的是在字体哪里,需要引入实际的字体路径,否则,可能出现图像显示不了验证码】

session_start ();
/*设置文件头为图片输出*/
Header("Content-type: image/JPEG");
/*调用生成验证码函数*/
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234565789";
$result="";
for($i=0;$i<$length;$i++){
  $num[$i]=rand(0,61);
  $result.=$str[$num[$i]];
}
$text $result;
$_SESSION ["administratorConfirmCode"] = $text;
/*设置图片的宽度和高度*/
$im_x $w;
$im_y $y;
/*创建图片*/
$im imagecreatetruecolor($im_x,$im_y);
$text_c ImageColorAllocate($immt_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($im1613$buttum_c);
/*字体文件*/
$font = _WEB_DIR_.'/font/comic.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$an15+$i*$size35$text_c$font$tmp);
}
/*将字符写入文件中*/
$distortion_im imagecreatetruecolor ($im_x$im_y);
imagefill($distortion_im1613$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);
    }
  }
}
/*干扰元素点的数量*/
$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_immt_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);
  }
}
/*以PNG格式将图像输出到浏览器*/
ImagePNG($distortion_im);
/*销毁图像*/
ImageDestroy($distortion_im);
ImageDestroy($im);

以上是“PHP如何生成图像验证码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×