PHP中文验证码 原创!
分享共同进步!
注意字体文件一定要拷贝到当前目录下测试
本程序支持linux和win
function verify($user_str)函数是验正用户输入的函数
function c2ch($num)函数的解释
这个函数根据汉字区码表生成汉字区码我的函数只从 汉字区码从16区到36区中取汉字
因为36区后的汉字 并不常见了
每个区 94个汉字 我认为仅仅取前20个汉字就可以了 这样 也会有((36-16+1) *20)^4种可能
我认为这是目前相对安全的
<?php
/********************************************
* 中文验正码产生程序 v 0.1
* 作者 : eye_onme
* QQ : 64641403
* MSN : i_onme@163.com
* MAIL: i_onme@163.com
**********************************************/
function verify($user_str){//从cookie中对比用户的输入
if(md5($cookie_str.CRYPT_STRING)==$_COOKIE['vrify'])
return 1;
else
return 0;
}
function c2ch($num){
$ch_h = chr(substr($num,0,2)+160);
$ch_l = chr(substr($num,2,2)+160);
return $ch_h.$ch_l;
}
function num_rand(){
mt_srand((double)microtime() * 1000000);
$d= mt_rand(16,36);
$n= mt_rand(1,19);
return c2ch($d*100+$n);
}
$k[0]=num_rand();
$k[1]=num_rand();
$k[2]=num_rand();
$k[3]=num_rand();
$cookie_str=implode('', $k);
setcookie('vrify',md5($cookie_str.CRYPT_STRING),time()+600);
$str[0]=iconv('gb2312','UTF-8',$k[0]);
$str[1]=iconv('gb2312','UTF-8',$k[1]);
$str[2]=iconv('gb2312','UTF-8',$k[2]);
$str[3]=iconv('gb2312','UTF-8',$k[3]);
//构造图像
$x_size=80;
$y_size=25;
$font='simhei.ttf';
$pic=imagecreate($x_size,$y_size);
$background_color = imagecolorallocate ($pic, 255, 255, 255);
$black=imagecolorallocate($pic,0,0,0);
$red=imagecolorallocate($pic,255,0,0);
$ddd=imagecolorallocate($pic,255,0,255);
imagettftext($pic,15,mt_rand(-8,8),6,mt_rand(19,22),$black,$font,$str[0]);
imagettftext($pic,15,mt_rand(-8,8),37,20,$black,$font,$str[2]);
imagettftext($pic,mt_rand(15,17),mt_rand(-8,8),22,20,$ddd,$font,$str[1]);
imagettftext($pic,mt_rand(15,17),mt_rand(-8,8),54,mt_rand(19,22),$red,$font,$str[3]);
imagerectangle($pic, 0, 0, $x_size - 1, $y_size - 1,$black);
Imagepng($pic);
ImageDestroy($pic);
?>


最新回复
加亮一下吧