PHP – Generare stringhe casuali

PHP – Generare stringhe casuali
Freia

In questa guida PHP vi spiegherò come creare una classe completa con la quale potrete creare stringhe contenenti caratteri casuali inseriti da voi oppure generati dalla classe.

Creiamo subito la nostra classe:

class random_string {
	public $length;
	public $characters;
	public $iden;
	public $charactersrange;
	public $oldiden = array();

	function __construct($length = 15) {
		$this->length = $length;
		$characters = array_merge(range(0,9),range("a","z"));
		$this->characters = $characters;
		$this->charactersrange = count($characters)-1;
	}
}

Come potete vedere dal codice qua sopra abbiamo creato una nuova classe di nome random_string con 5 classi

  • length Conterrà il numero di caratteri che conterrà la nostra stringa
  • characters Conterrà tutti i caratteri che che potrà contenere la nostra stringa
  • iden Conterrà la stringa
  • charactersrange Conterrà l’indice massimo dell’array “characters”
  • oldiden Conterrà tutte le stringhe che abbiamo già trovato, infatti generiamo 2 o più volte una stringa e una di queste è già stata trovata in precedenza ne verrà generata un altra, ho inserito questa funzione perché uso spesso questa classe per generare il “codice identificativo” degli utenti dei miei database, da questo il nome “iden

La funzione costruttore non fa altro che dare una valore alla variabile length (il cui valore standard è settato a 15″), alla variabile characters (che contiene un array con tutte le cifre e lettere) e charactersrange spiegato in precedenza.

Se passeremo un valore numerico alla classe quando viene creata la variabile length non sarà più 15 ma il valore che abbiamo passato
$string = new random_string(5);

Creiamo la funzione get la quale farà praticamente il grosso del lavoro della nostra classe

function get() {
	$this->iden = "";
	for($x = 0; $x < $this->length; $x++) {
		$rand = rand(0,$this->charactersrange);
		$this->iden .= $this->characters[$rand];
	}
	if(in_array($this->iden,$this->oldiden)) {
		$this->get();
	} else {
		$this->oldiden[] = $this->iden;
	}
	return $this->iden;
}

Questa funzione resetta la variabile iden della classe e successivamente esegue un ciclo for il quale andrà a scegliere un carattere a caso dall’array characters e lo inserirà nella variabile iden fino ad avere una stringa lunga x caratteri dove x è uguale a length

Successivamente verrà fatto un controllo ( Se la stringa generata è già stata trovata in precedenza riesegui la funzione get, altrimenti inserisci la stringa nell’array oldiden e restituiscila ).

Il grosso della classe l’abbiamo già creato, non ci resta solo che creare delle funzioni per modificare la struttura i settaggi della classe

function setlength($var) {
	if(is_int($var) && $var != "") {
		$this->length = $var;
	}
}

function onlynumbers() {
	$this->characters = range(0,9);
	$this->charactersrange = count($this->characters)-1;
}

function onlyletters() {
	$this->characters = range("a","z");
	$this->charactersrange = count($this->characters)-1;
}

function setcharacters($var) {
	if(is_array($var)) {
		$this->characters = $var;
		$this->charactersrange = count($this->characters)-1;
	}
}
  • La funzione setlength come si può capire dal nome cambia il valore della variabile length
  • La funzione onlynumbers sostituisce l’array characters con un array contenente tutte le cifre
  • La funzione onlyletters sostituisce l’array characters con un array contenente tutti i caratteri
  • La funzione setcharacters sostituisce l’array characters con un array inserito da noi

Esempio funzione setcharacters

$string = new random_string(5);
$string->setcharacters(array("a","e","i","o","u"));
echo $string->get();
//possibile risultato: ouaai

Ed ecco a voi la nostra classe completa

class random_string {
	public $length;
	public $characters;
	public $iden;
	public $charactersrange;
	public $oldiden = array();

	function __construct($length = 15) {
		$this->length = $length;
		$characters = array_merge(range(0,9),range("a","z"));
		$this->characters = $characters;
		$this->charactersrange = count($characters)-1;
	}

	function get() {
		$this->iden = "";
		for($x = 0; $x < $this->length; $x++) {
			$rand = rand(0,$this->charactersrange);
			$this->iden .= $this->characters[$rand];
		}
		if(in_array($this->iden,$this->oldiden)) {
			$this->get();
		} else {
			$this->oldiden[] = $this->iden;
		}
		return $this->iden;
	}

	function setlength($var) {
		if(is_int($var) && $var != "") {
			$this->length = $var;
		}
	}

	function onlynumbers() {
		$this->characters = range(0,9);
		$this->charactersrange = count($this->characters)-1;
	}

	function onlyletters() {
		$this->characters = range("a","z");
		$this->charactersrange = count($this->characters)-1;
	}

	function setcharacters($var) {
		if(is_array($var)) {
			$this->characters = $var;
			$this->charactersrange = count($this->characters)-1;
		}
	}
}

Ricordo che se eseguite più volte la funzione get senza resettare la classe ci sarà un limite al numero di risultati che potrete trovare, qua sotto potete trovare un esempio che genera un loop infinito data l’impossibilità di generare una stringa non ancora trovata

$string = new random_string(3);
$string->setcharacters(array("a","b","c"));
for($x = 1; $x <= 10; $x++) {
	$string->get();
}

Queste poche righe di codice genereranno un loop infinito, infatti la funzione get potrà generare massimo 9 stringhe diverse, arrivata alla decima si ripeterà all’infinito, potete impedire che questo accada inserendo dei contatori.

Spero che questa guida vi sia d’aiuto e non esitate a farmi domande nei commenti!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

widget-mondiali-calcio
Up Next:

Widget mondiali di calcio 2014 in versione Wordpress e HTML

Widget mondiali di calcio 2014 in versione Wordpress e HTML