Visualizzazione risultati 1 fino 3 di 3

Discussione: Script per creare codice captha

  1. #1
    Guest

    Predefinito Script per creare codice captha

    Salve ragazzi sto creando il mio sito web con tanto di registrazione e login ora per completare il lavoro mi manca solo creare un codice captcha, il realta l'ho gia creato solo che vorrei cambiare alcune cose. Ecco lo script php:
    Codice PHP:
    <?php
    session_start
    ();

    define("NONE", 0);
    define("EASY", 30);
    define("MEDIUM", 50);
    define("HARD", 80);
    define("VERY_HARD", 100);

    define("POINT", 1);
    define("LINE", 2);

    /* dimensioni */
    $x = 215; //larghezza
    $y = 80; //altezza

    $image = imagecreatetruecolor($x, $y); //creo l'immagine

    $color = array();
    $color[] = imagecolorallocate($image, 255, 0, 0);
    $color[] = imagecolorallocate($image, 0, 255, 0);
    $color[] = imagecolorallocate($image, 0, 0, 255);
    $color[] = imagecolorallocate($image, 255, 255, 0);
    $color[] = imagecolorallocate($image, 255, 0, 255);
    $color[] = imagecolorallocate($image, 255, 255, 255);
    $color[] = imagecolorallocate($image, 0, 255, 255);

    $font = array();
    $font[] = "font/arial.ttf";
    $font[] = "font/abbeyroad_regular.ttf";
    $font[] = "font/roman_sd_regular.ttf";
    $font[] = "font/elephants_in_cherry_trees_normal.ttf";

    $black = imagecolorallocate($image, 0, 0, 0);
    imagefill($image, 0, 0, $black);
    add_noise($image, EASY, LINE, $x, $y); //aggiungo il disturbo

    $_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa

    for($i = 0;$i < strlen($_SESSION['CAPTCHA']); $i++) {
    /* per ogni lettera applico impostazioni diverse (dimensione, angolo, colore, font) */
    imagettftext(
    $image, //immagine
    20 + rand(0, 6), //dimensione carattere
    rand(-35, 35), //angolo di rotazione
    ($i+1)*26, //offset sulla x
    45+ rand(0, 4), //offset sulla y
    $color[rand(0, count($color)-1)], //colore
    $font[rand(0, count($font)-1)], //carattere
    $_SESSION['CAPTCHA'][$i] //lettera da stampare
    );
    }

    header("Content-type: image/png");

    imagepng($image);
    imagedestroy($image);


    function
    getString() {
    $str = base64_encode(time());
    $str = str_replace("=", "", $str); //elimino gli =
    $str = str_shuffle($str);
    return
    substr($str, 0, 6);
    }

    function
    add_noise($image, $difficoult, $figure, $x, $y) {
    if(
    $figure == 1)
    $difficoult *= 15; //i punti devono essere più delle linee per generare un disturbo significativo

    for($i = 0; $i < $difficoult; $i++) {
    $color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
    $p = rand(0, 10);
    $x1 = rand($p, rand($x - $p, $x-1));
    $x2 = rand($p, rand($x - $p, $x-1));
    $y1 = rand($p, rand($y - $p, $y-1));
    $y2 = rand($p, rand($y - $p, $y-1));

    switch(
    $figure) {
    case
    1:
    imageline($image, $x1, $y1, $x1, $y1, $color);
    break;
    default:
    imageline($image, $x1, $y1, $x2, $y2, $color);
    break;
    }
    }

    }
    ?>
    Il captcha ha lo sfondo nero ed delle linee che creano il disturbo, mentre io vorrei un captcha adatto per lo stile del mio sito, chi sarebbe cosi gentile da spiegarmi come faccio a cambiare lo sfondo da nero a bianco, togliere il disturbo delle linee e cambiare ilcolore dei caratteri.
    Ultima modifica di alemoppo : 16-07-2014 alle ore 12.01.30 Motivo: +tag [php]

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,266

    Predefinito

    Citazione Originalmente inviato da test44 Visualizza messaggio
    cambiare lo sfondo da nero a bianco
    Codice PHP:
    $black = imagecolorallocate($image, 0, 0, 0);
    imagefill($image, 0, 0, $black);
    -----
    Citazione Originalmente inviato da test44 Visualizza messaggio
    togliere il disturbo delle linee
    Codice PHP:
    add_noise($image, EASY, LINE, $x, $y); //aggiungo il disturbo
    -----
    Citazione Originalmente inviato da test44 Visualizza messaggio
    cambiare ilcolore dei caratteri
    Codice PHP:
    for($i = 0;$i < strlen($_SESSION['CAPTCHA']); $i++) {
    /* per ogni lettera applico impostazioni diverse (dimensione, angolo, colore, font) */
    imagettftext(
    $image, //immagine
    20 + rand(0, 6), //dimensione carattere
    rand(-35, 35), //angolo di rotazione
    ($i+1)*26, //offset sulla x
    45+ rand(0, 4), //offset sulla y
    $color[rand(0, count($color)-1)], //colore
    $font[rand(0, count($font)-1)], //carattere
    $_SESSION['CAPTCHA'][$i] //lettera da stampare
    );
    }
    Ciao!
    Ultima modifica di alemoppo : 16-07-2014 alle ore 12.09.00

  3. #3
    Guest

    Predefinito

    Grazie mille smanettando un po con lo script sono riuscito a modificarlo per i miei scopi. Ora però avrei un problema, vorrei fare in modo che se durante la registrazione il captha digitato non è corretto la registrazione non avvenga e che spunti un messaggio d'errore.

    Ecco lo script della pagina di registrazione:

    <font size="6">Registration .....</font><br /><br /><br />
    <?php
    include('core.php');
    if(isset($_POST['register'])) {
    $username = isset($_POST['username']) ? clear($_POST['username']) : false;
    $password = isset($_POST['password']) ? clear($_POST['password']) : false;
    $captcha = isset($_POST['captcha']) ? clear($_POST['captcha']) : false;
    if(empty($username) || empty($password)) {
    echo 'To keep the registration fill all fields.<br /><br /><a href="javascript:history.back();">back</a>';
    } elseif(strlen($username) > 16) {
    echo 'Username too long. Max of 16 characters.<br /><br /><a href="javascript:history.back();">back</a>';
    } elseif(strlen($password) < 6 || strlen($password) > 24) {
    echo 'Password length is not valid. Min 6 characters and max 24.<br /><br /><a href="javascript:history.back();">back</a>';
    } elseif(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username'")) > 0) {
    echo 'Username already in use.<br /><br /><a href="javascript:history.back();">back</a>';
    }
    else {
    $password = md5($password);
    $ip = $_SERVER['REMOTE_ADDR'];
    if(mysql_query("INSERT INTO users (username, password, reg_ip, last_ip, reg_date) VALUES ('$username','$password','$ip','$ip',UNIX_TIMESTAM P())")) {
    header('location: home.php');;
    } else {
    echo 'Errore nella query: '.mysql_error();
    }
    }
    } else {
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <label><strong>Username:</strong> <input type="text" name="username" size="30" /></label><br /><br />
    <label><strong>Password:</strong> <input type="password" name="password" size="30" /></label><br /><br />
    <label><strong>Security image:</strong><br /><br /> <img src="captcha.php" /><br /><br />
    <input id="scimg" name="scimg" type="text" size="30"/></label><br /><br />
    <input type="submit" name="register" value="Register" />
    </form>
    <?php
    }
    ?>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •