Tu ležala reklama.
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
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.
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));
}
?>
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.
<?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 )
Tu ležala reklama.
Môžete používať tieto tagy:
<i> <em> <b> <strong> <a> <u> <img>
Prosím píšte s diakritikov a zrozumitelne! Blog podporuje Gravatar!
Tu ležala reklama.
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.