首页 / PHP / php算式验证码和汉字验证码的实现方法
php算式验证码和汉字验证码的实现方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php算式验证码和汉字验证码的实现方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3967字,纯文字阅读大概需要6分钟。
内容图文
![php算式验证码和汉字验证码的实现方法](/upload/InfoBanner/zyjiaocheng/149/5f482279c93946b1b9293f58c601bf83.jpg)
大家知道简单数字或者字母验证码很容易被破解,但是算式验证码或者中文汉字验证码不容易被破解,所以建议大家在使用验证码的时候,尽量用算式验证码或者中文汉字验证码。
下面是两种验证码代码,有用到的朋友可以参考下:
1.算式验证码:
<?php session_start(); header("Content-type: image/png"); $num1 = mt_rand(0,9);//第一位数 $num2 = mt_rand(1,9);//第二位数 $type_str = "+-*";//方法字符串集合 $type = substr($type_str,rand(0,2),1);//随机方法 $change = mt_rand(1,3); if($change==1){ $code = "$num1$type$num2=?"; $result = "\$verifyCode=$num1$type$num2;"; eval($result); $_SESSION['authnum_session'] = $verifyCode; }elseif($change==2){ $result = "\$verifyCode=$num1$type$num2;"; eval($result); $code = $num1.$type."_=".$verifyCode; $_SESSION['authnum_session'] = $num2; }elseif($change==3){ $result = "\$verifyCode=$num1$type$num2;"; eval($result); $code = "_".$type.$num2."=".$verifyCode; $_SESSION['authnum_session'] = $num1; } $im = imagecreate(68,28); $black = imagecolorallocate($im, 0,0,0); $white = imagecolorallocate($im, 255,255,255); $gray = imagecolorallocate($im, 200,200,200); $red = imagecolorallocate($im, 255, 0, 0); imagefill($im,0,0,$white); imagestring($im, 5, 10, 8, $code, $black); for($i=0;$i<70;$i++) { imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $black); imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $red); imagesetpixel($im, mt_rand(0, 58) , mt_rand(0, 28) , $gray); } imagepng($im); imagedestroy($im); ?>
2.中文汉字验证码:
<?php session_start(); $ch_str="的一是在了不和有大这主中人上为们地个用工时要动国产以我到他会作来分生对于学下级就年阶义发成部民可出能方进 同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反 体合斗路图把结第里正新开论之物从当两些还天资事队批如应形想制心样干都向变关点育重其思与间内去因件日利相"; $len = mb_strlen($ch_str,"utf-8");//汉字长度 $str = array(); for($i=0;$i<4;$i++){ $pos = mt_rand(0,$len-5);//开始位置 $str[] = mb_substr($ch_str,$pos,1,"utf-8"); } $authnum_session = implode("",$str); $_SESSION['authnum_session'] = $authnum_session; //记录到session Header("Content-type: image/PNG"); //图片的长和高 $image_x=100; $image_y=50; $im = imagecreate($image_x,$image_y); //这里取图片底色为白色 $bkg = ImageColorAllocate($im,255,255,255); //显示的字体样式,这个要把文件放到对应的目录中,如果你没有文件就去window的字体文件中找一个吧。 $fnt = "simhei.ttf"; //为图像分配一些颜色 $white=ImageColorAllocate($im,234,185,95); //在图片上画椭圆弧,指定下坐标点 imagearc($im, 150, 8, 20, 20, 75, 170, $white); imagearc($im, 180, 7,50, 30, 75, 175, $white); //在图片上画一条线段,指定下坐标点 imageline($im,20,20,180,30,$white); imageline($im,20,18,170,50,$white); imageline($im,25,50,80,50,$white); //乱点的数量 $noise_num=3000; $line_num=50; //各种混乱字符的颜色 $rectangle_color=imagecolorallocate($im,0xAA,0xAA,0xAA); $noise_color=imagecolorallocate($im,0x00,0x00,0x00); $font_color=imagecolorallocate($im,0x00,0x00,0x00); for($i=0;$i<$noise_num;$i++) { //在一个坐标点上画一个单一像素,这个点上面定义了,是黑色的。 //imagesetpixel($im,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color); } for($i=0;$i<$line_num;$i++) { $line_color=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //在两个坐标点间画一条线,颜色在上面定义 imageline($im,mt_rand(0,$image_x),mt_rand(0,$image_y),mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color); } for ($i=0;$i<4;$i++) { ImageTTFText($im, rand(18,20), rand(0,20), rand(($image_x/4)*$i+$image_x/100,($image_x/4)*$i+$image_x/8), rand($image_y/2+$image_y/10,$image_y/2+$image_y/5), $font_color, $fnt, $str[$i]); } ImagePNG($im); ImageDestroy($im); ?>
注意:
中文汉字验证码单独执行,然后获取session会发现验证码和session内容不一致。但是在img 标签中src属性中引用这个中文汉字验证码文件时,然后获取session,这时两者内容时一致的。
感兴趣的朋友可以对此进一步加以完善。
内容总结
以上是互联网集市为您收集整理的php算式验证码和汉字验证码的实现方法全部内容,希望文章能够帮你解决php算式验证码和汉字验证码的实现方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。