Maison > développement back-end > Problème PHP > Comment générer automatiquement un code de vérification en php

Comment générer automatiquement un code de vérification en php

王林
Libérer: 2023-03-13 13:02:01
original
3046 Les gens l'ont consulté

Méthode php pour générer automatiquement des codes de vérification : [session_start(); $width = 150; $height = 40; $image = imagecreatetruecolor($width, $height);$bgcol...].

Comment générer automatiquement un code de vérification en php

L'environnement d'exploitation de cet article : système windows10, php 7, ordinateur thinkpad t480.

De nos jours, les codes de vérification sont de plus en plus utilisés dans les formulaires, mais il est toujours peu pratique de les implémenter avec js, j'utilise donc php pour l'implémenter et l'enregistrer ici.

Bien sûr, nous pouvons également l'encapsuler dans une fonction, ce qui est très pratique pour une utilisation future. Il n'est pas encapsulé ici, et les amis intéressés peuvent l'encapsuler eux-mêmes.

Code d'implémentation spécifique :

Créez un nouveau fichier cap_sz.php :

<?php
session_start(); //设置session,一定要在顶部

$width = 150; //设置图片宽为300像素
$height = 40; //设置图片高为40像素

$image = imagecreatetruecolor($width, $height); //设置验证码大小的函数
$bgcolor = imagecolorallocate($image, 255, 255, 255); //验证码颜色RGB为(255,255,255)#ffffff
imagefill($image, 0, 0, $bgcolor); //区域填充

$cap_code = "";
for($i=0;$i<4;$i++){
    $fontsize = 7; //设置字体大小
    $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
    //数字越大,颜色越浅,这里是深颜色0-120
    $fontcontent = rand(0,9);
    $cap_code.=$fontcontent; //.=连续定义变量
   
    $x = ($i*150/4)+rand(5,10);
    $y = rand(5,10);
    //设置坐标
   
    imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}

$_SESSION[&#39;code&#39;] = $cap_code; //存到session

//设置干扰元素,设置雪花点
for($i=0;$i<300;$i++){
    $inputcolor = imagecolorallocate($image, rand(50,200), rand(20,200), rand(50,200));
    //设置颜色,20-200颜色比数字浅,不干扰阅读
    imagesetpixel($image, rand(1,149), rand(1,39), $inputcolor);
    //画一个单一像素的元素
}

//增加干扰元素,设置横线(先设置线的颜色,在设置横线)
for ($i=0;$i<4;$i++) {
    $linecolor = imagecolorallocate($image, rand(20,220), rand(20,220),rand(20,220));
    //设置线的颜色

    imageline($image, rand(1,149), rand(1,39), rand(1,299), rand(1,149), $linecolor);  

}

//因为有些浏览器,访问的content-type会是文本型(乱码),所以我们需要设置成图片的格式类型
header(&#39;Content-Type:image/png&#39;);

imagepng($image); //建立png函数
imagedestroy($image); //结束图形函数,消除$image
Copier après la connexion

Puis créez un nouveau index.php pour vérification

<?php
header("Content-Type: text/html;charset=utf-8");
if (isset($_REQUEST[&#39;code&#39;])){
    session_start();

    if ($_REQUEST[&#39;code&#39;] == $_SESSION[&#39;code&#39;]){
        echo "输入正确";
    }else{
        echo "输入错误,请重新输入";
    }

    exit();
}

?>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> //这里不能少,不然乱码
    <title>验证码测试</title>
</head>
<body>
<form>
<p>验证码:<img src="cap_sz.php" onClick="this.src=&#39;cap_sz.php?nocache=&#39;+Math.random()" style="cursor:hand" alt="点击换一张"/>点击图片可更换验证码</p>
<p>请输入图片中的内容:<input type="text" name="code" value=""/></p>
<p><input type="submit" width="20px" height=19px value="提交"></input></p>

</form>
</body>
</html>
Copier après la connexion

Apprentissage recommandé : Formation php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal