Tu ležala reklama.

21. Jún 2009 13:10 0 komentárov

Jednoduchá CAPTCHA

V mojich troch predchádzajúcich článkoch som písal o filtroch proti spamu. Prvým filtrom bola CAPTCHA. A tak mi napadlol, že čo keby som napísal článok ako vytvoriť jednoduchú CAPTCHu

Obrázkovú CAPTCHu naprogramujem pomocou scriptovacieho jazyka PHP. CAPTCHA bude pozostávať z šiestich náhodne vygenerovaných znakov na obrázku. 

K funkčnosti obrázkovej CAPTCHy budeme potrebovať:
- PHP na serveri vo verzii 4 alebo 5
- GD knihovnu
- nejaké pekné a čitatelné písmo

1. Generovanie náhodných znakov

Na vygenerovanie náhodných znakov použijeme funkciu rand() a chr(). Funkcia rand() nám vygeneruje náhodné číslo. Funkcia chr() nám z čísla (ASCII kód) vygeneruje znak. Pre znaky A-Z je ASCII kód 65-90, pre a-z je 97-122 a pre čísla 0-9 je 48-57. Dlžka reťažca bude šesť znakov. Teda budeme potrebovať nejaký cyklus napr. for.

Generovanie znakov:

Je len na nás čo si vyberieme malé alebo velké písmená alebo čísla. V prípade, že chceme mať naraz všetky (malé, velké písmená alebo čísla), možeme použiť Str4wberryho funkciu
Script pre malé písmená vyzerá takto:

<?php
$vystup = NULL;
for($i=0;$i<6;$i++){
$vystup .= chr(rand(97,122));
}
?>


Script pre velké písmená vyzerá takto:

<?php
$vystup = NULL;
for($i=0;$i<6;$i++){
$vystup .= chr(rand(65,90));
}
?>


Script pre čísla vyzerá takto:

<?php
$vystup = NULL;
for($i=0;$i<6;$i++){
$vystup .= chr(rand(48,57));
}
?>

2. Písmo

Výber písma treba zvážiť, aby bolo čitatelné pre návštevníkov a nečitalné pre robota. Ja som si vybral písmo Corbel. Písmo uložime do rovnakého adresára ako script. 

3. Obrázok

<?php
//Nastavenie Content-type
header('Content-type: image/png');

//Zadefinovanie obrázka a nastavenie velikosti
$img = imagecreatetruecolor(100, 25);

//Alokovanie farieb
$pozadie = imagecolorallocate($img,150,0,0);
$pismo = imagecolorallocate($img,255,255,255);

//vytvorenie "kresliacej" polchy
imagefilledrectangle($img, 0, 0, 100, 25, $pozadie);

//Písmo
$font = 'corbel.ttf';

//zápis do obrázka
imagettftext($img, 12, rand(-5,5), 24, 16, $pismo, $font, $vystup);

imagepng($img);
imagedestroy($img);?>


Väčšinu ste snáť z komntárov pochopili. Vysvetlím akurát fukciu imagefilledrectangle().

imagefilledrectangle( premená obrázku , velikosť písma , nahnutie textu, preto aby CAPTCHA bola ťažšie zdolatelná pre robota , pozícia z lavého boku , pozícia z vrchu , farba písma , písmo , náhodne vygenerované znaky )

Živá ukážka:

Živá ukážka.

Celý kód nájdete tu.

Tu ležala reklama.

0 komentárov ku článku „Jednoduchá CAPTCHA

(povinné)

(povinné, ale nezorbrazi sa)



(povinné)

(Zakázené)

Môžete používať tieto tagy:

<i> <em> <b> <strong> <a> <u> <img>

Prosím píšte s diakritikov a zrozumitelne! Blog podporuje Gravatar!

Kontakt

Vytvoril kletely v roku 2008 - 2021 všetky práva vyhradené.


Stránka beží na vlastno ručne napísanom redakčnom systéme Frup.