eye_onme
新手上路

初级会员
UID 69100
精华
0
积分 30
帖子 21
金钱 30 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-3-6 来自 北京
状态 离线
|
[原创]PHP中文验证码程序 欢迎指正
[原创]PHP中文验证码程序 欢迎指正
声明:
本文已经首发在chinaunix论坛的php板块欢迎大家指点
分享共同进步!
这是我给自己的phpwind论坛做的验证码程序 我实在看不惯那些注册机发帖机
现在居然有识别图片的脚本 我倒!
下面的验正码我用汉王正版OCR进行识别测试了 无法正确识别 所以大家放心吧
我没用使用session 本来是session的版本 后来发现集群上 还涉及同步 好麻烦
下面这个版本是用cookie的
注意字体文件一定要拷贝到当前目录下测试
本程序支持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
*
* WWW.TOM.COM
*
* 欢迎指出错误 和修改意见 分享让我们共同进步
* 1: 程序没用使用类进行封装
* 2: 使用的函数在php5上才能正常运行
* 3: 程序效率不够高
* 4: 希望大家不断完善 开放源代码
* 汉字博大精深 本程序仅使用常见汉字作为验正码
* 请保留以上信息 给我小小的支持吧
**********************************************/
define('CRYPT_STRING', 'MSN:i_onme@163.com');
define('RSA_CRYPT_STRING', 'QQ:64641403');
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);
?>
|
|