Lūdzu neesi et pārāk kritiski, šī ir mana pirmā php funkcija (laikam gan bezjēdzīga). :)
Ideja vienkārša - ģenerē random stringu, un var norādīt, no cik blokiem sastāvēs, cik simboli blokā, ar kādu simbolu atdalīt blokus, un tādā garā. :)

 

function random_string($blocks, $chars, $spacer) {
$b = 0;
$symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
while ($blocks > $b) {
$s = 0;
while ($chars > $s) {
$char = substr(str_shuffle($symbols), 0, 1);
if ($s == $chars - 1 && $b != $blocks - 1) {
$char = $char . $spacer;
}
$output = $output . $char;

$s = $s+1;
}

$output2 = $output;
$b = $b+1;
}

return $output2;

}
Tātad, skaidrojums.

echo random_string(3,4,'-'); atgriezīs ko šādu 4KIg-Y3Al-wIeE
echo random_string(4,4,'1');
atgriezīs ko šādu 4KIg1Y3Al1wIeE1gNy6
echo random_string(4,1,'-');
atgriezīs ko šādu 4-Y-w-x



Kapēc es ģenerēju katru zīmi atsevišķi? Jo str_shuffle patiesībā neģenerē random skaitli, bet sajauc tikai secību. Līdz ar to, ģenerējot visu kopā, viens bloks nevarētu būt garāks, kā $symbols, un burti nevarētu atkārtoties. mana metode šo padara true random. Protams, šajā variantā kodi var atkārtoties, bet to var vienkārši apiet visu ieliekot masīvā, un pēc ģenerēšanas pārbaudot, vai šāds jau atrodas masīvā. Ja atrodas, pārģenerē. Ja nē - iet tālāk. ;)


Strādā tas vienkārši. Padod bloku skaitu, simbolu skaitu blokā, un bloku atdalītāju. 2 cikli. Viens skaita blokus, un iekš tā paša bloku skaitīšanas cikla ir simbolu skaitīšanas cikls, kas neļauj ciklam atkārtoties vairāk reizes, kā norāda izdrukā. Pirms atdalītāja likšanas tiek arī pārbaudīts, vai bloks nav pēdējais, lai viss nebeigtos ar atdalītāju. (nu 4KIg-Y3Al-wIeE-). :)

 

 

UPDATE:
Nedaudz pielāgoju, tagad ar šo var arī norādīt nepieciešamo čarsetu.

 

function random_string($blocks, $chars, $spacer, $charset) {
$b = 0;
if ($charset == 'upper') {
$symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
else if ($charset == 'upper_num') {
$symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
}
else if ($charset == 'lower') {
$symbols = 'abcdefghijklmnopqrstuvwxyz';
}
else if ($charset == 'lower_num') {
$symbols = 'abcdefghijklmnopqrstuvwxyz0123456789';
}
else if ($charset == 'num') {
$symbols = '0123456789';
}
else {
$symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
}
while ($blocks > $b) {
$s = 0;
while ($chars > $s) {
$char = substr(str_shuffle($symbols), 0, 1);
if ($s == $chars - 1 && $b != $blocks - 1) {
$char = $char . $spacer;
}
$output = $output . $char;
$s = $s+1;
}
$output2 = $output;
$b = $b+1;
}
return $output2;
}


if (!isset($_GET['codes'])) {
echo random_string(1,5,'-','lower_num').'<br />
';
}
else if ($_GET['codes'] > 0) {
$s = 0;
while ($_GET['codes'] > $s) {
echo random_string(1,5,'-','lower_num').'<br />
';
$s = $s+1;
}
}
else {
echo random_string(1,5,'-','lower_num').'<br />
';
}

Laboja S J, labots 6x