W moim kodzie wygenerowanie 10k 9-znakowych tokenów trwało niecałą sekundę, więc o wydajność nie martwiłbym się. ;p
Potrzebowałem ostatnio czegoś takiego na szybkości, że tak powiem.
<?php
/*
* GENERATOR LOSOWYCH TOKENÓW/ZNAKÓW
*
* MOŻLIWE TOKENY: LITERY (DUŻE I MAŁE), CYFRY, ZNAKI SPECJALNE ORAZ WSZYSTKIE NA RAZ
*
* PRZYKŁAD UŻYCIA:
*
* require('classes/class.randomtoken.php'); // dołączanie biblioteki
*
* $token = new RandomToken; // tworzenie obiektu
* $token->setBigAlpha(); // ustawianie małych i wielkich liter, bez tej linijki będą tylko małe litery
* $token->setAlphaNumericSpecial(); // wybór rodzaju wygenerowanego tokena, dostępne:
* // $this->setNumeric(); // tylko cyfry
* // $this->setAlpha(); // tylko litery
* // $this->setSpecial(); // tylko znaki specjalne
* // $this->setAlphaNumeric(); // cyfry i litery
* // $this->setAlphaNumericSpecial(); // cyfry, litery i znaki specjalne
* echo $token->generate(15); // zwraca token o podanej długości w parametrze
*/
class RandomToken
{
private $_pattern = array(); private $_numeric = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); private $_alpha = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "w", "x", "y"); private $_alphaBig = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "k", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y"); private $_special = array("!", "@", "#", "_", "-", "@", "#", "_", "-");
public function setNumeric()
{
$this->_pattern = $this->_numeric;
}
public function setAlpha()
{
$this->_pattern = $this->_alpha;
}
public function setBigAlpha()
{
}
public function setSpecial()
{
$this->_pattern = $this->_special;
}
public function setAlphaNumeric()
{
}
public function setAlphaNumericSpecial()
{
}
public function generate($count)
{
for($y = 1; $y <= $count; $y++)
{
$result .= $this->_pattern[$rand];
}
return $result;
}
}
Użycie:
require('classes/class.randomtoken.php');
$token = new RandomToken;
$token->setBigAlpha();
$token->setAlphaNumericSpecial();
$i = 0;
while($i <= 10000)
{
echo $token->generate(9
); $i++;
}
Ważne, że spełnia swoją rolę. ;P
Edit: tamten był oczywiście niepoprawny, teraz jest 'wydajniejszy'.