php 汉字验证码

代码:

captcha.php

<?php
//实现简单的验证码

//session_start
session_start();
//画布
$image = imagecreatetruecolor(200, 60);
//设置填充颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//填充
imagefill($image, 0, 0, $bgcolor);

//随机数据
$str = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严';
//因为在utf-8中,汉字是3个字符
$cndb = str_split($str,3);
//session
$captcha_code = '';
for ($i = 0; $i < 4; $i++) {
    //字体颜色
    $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
    //数组下标
    $index = mt_rand(0,count($cndb));
    //存储汉字
    $font_cn = $cndb[$index];
    //
    $captcha_code .= $font_cn;
    //字体
    $font = './font/msyh.ttc';
    //画到画布
    imagettftext($image,mt_rand(16,20),mt_rand(-60,60),(40*$i+20),mt_rand(30,35),$fontcolor,$font,$font_cn);
}
//保存到session
$_SESSION['authcode'] = $captcha_code;
//干扰
//像素点
for ($i = 0; $i < 200; $i++) {
    $pixcolor = imagecolorallocate($image, mt_rand(20, 200), mt_rand(20, 200), mt_rand(20, 200));
    imagesetpixel($image, mt_rand(0, 199), mt_rand(0, 59), $pixcolor);
}

//线
for ($i = 0; $i < 4; $i++) {
    $linecolor = imagecolorallocate($image, mt_rand(50, 220), mt_rand(50, 220), mt_rand(50, 220));
    imageline($image, mt_rand(0, 199), mt_rand(0, 59), mt_rand(0, 199), mt_rand(0, 59), $linecolor);
}
//输出
header('Content-type: image/png');
imagepng($image);
//销毁
imagedestroy($image);

form.php

<?php
if (isset($_REQUEST['authcode'])) {
    session_start();
    //判断
    if (strtolower($_REQUEST['authcode'] == strtolower($_SESSION['authcode']))) {
        echo '恭喜你输入正确!';
    } else {
        echo '输入失败!';
    }
    exit();
}
?>
<html>
<head>
    <title>验证码提交</title>
</head>
<body>
<form action="form.php" method="post">
    <p>验证码:<img src="captcha.php?r=<?php echo mt_rand() ?>" id="captcha_img" alt="验证码" width="200" height="200" border="1px"></p>
    <a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">看不清?</a>
    <p>
        <label for="authcode">请输入图片中的内容: </label>
        <input type="text" name="authcode" id="authcode"/>
    </p>

    <p><input type="submit" value="submit"/></p>
</form>
</body>
</html>
原文地址:https://www.cnblogs.com/tumio/p/4893286.html