php实现汉字验证码和算式验证码的方法分享
发布时间:2022-10-07 11:13:19 所属栏目:PHP 来源:
导读: 这篇文章主要介绍了php实现汉字验证码和算式验证码的方法,实例分析了算式验证码及中文汉字验证码的实现技巧,非常具有实用价值,需要的朋友可以参考下
本文实例讲述了php实现汉字验证码和算式验证码的方法
本文实例讲述了php实现汉字验证码和算式验证码的方法
|
这篇文章主要介绍了php实现汉字验证码和算式验证码的方法,实例分析了算式验证码及中文汉字验证码的实现技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php实现汉字验证码和算式验证码的方法。分享给大家供大家参考。具体分析如下: 大家知道简单数字或者字母验证码很容易被破解,但是算式验证码或者中文汉字验证码不容易被破解, 所以建议大家在使用验证码的时候,尽量用算式验证码或者中文汉字验证码。 下面是我写的两种验证码代码,有用到的朋友可以参考下: 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(); $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); }。 (编辑:草根网_南昌站长网 ) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330553号