Classe JAVA per generare codici random

Ultimamente mi sono imbattuto in una nova sfida chiamata “Impara a programmare in JAVA che ti serve per lavoro”… Una delle necessità che ho avuto per portare avanti un progetto già avviato è stata quella di dover creare delle stringhe casuali da inserire in un url di controllo.
Sono sicuro che in giro ce ne saranno di migliori, ma funziona, e per essere la mia prima Classe JAVA sono abbastanza soddisfatto 🙂

Il codice:

import java.util.Random;

public class GeneraCodiceRandom {

	// array delle lettere
	private String[] Caratteri = { "a", "b", "c", "d", "e", "f", "g", "h", "i",
			"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "z", "y",
			"j", "k", "x", "w", "A", "B", "C", "D", "E", "F", "G", "H", "I",
			"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Z", "Y",
			"J", "K", "X", "W", "à", "è", "é", "ì", "ò", "ù" };

	// array dei numeri
	private String[] Numeri = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };

	// array dei caratteri speciali
	private String[] Speciali = { "!", "£", "$", "%", "&", "@", "*", ",", "_",
			"-", "#", ";", "^", "\", "/", ":", ".", "+", "§", "?", "ç" };

	// creo l'oggetto random
	private Random rand = new Random();

	public String GeneraCodice(int numeroCaratteriRandom, boolean conSpeciali,
			boolean conTimestamp, String separatore) {

		// ottengo la lunghezza di ogni array
		int lunghezzaCaratteri = Caratteri.length;
		int lunghezzaNumeri = Numeri.length;
		int lunghezzaSpeciali = Speciali.length;

		// istanzio la variabile che conterrà il prodotto finale
		String stringaRandom = "";

		while (stringaRandom.length() < numeroCaratteriRandom) {

			// ottengo un elemento casuale per ogni array
			int c = rand.nextInt(lunghezzaCaratteri);
			int n = rand.nextInt(lunghezzaNumeri);
			int s = rand.nextInt(lunghezzaSpeciali);

			// aggiungo una lettera casuale
			stringaRandom += Caratteri[c];
			// aggiungo un numero random
			stringaRandom += Numeri[n];
			// se l'opzione conSpeciali è true aggiungo un carattere speciale
			if (conSpeciali) {
				stringaRandom += Speciali[s];
			}
		}

		// se la stringa generata dovesse superare il numero di caratteri
		// richiesto, la taglio.
		if (stringaRandom.length() > numeroCaratteriRandom) {
			stringaRandom = stringaRandom.substring(0, numeroCaratteriRandom);
		}

		// se abbiamo deciso di mettere il timestamp
		if (conTimestamp) {
			// recupero il timestamp
			long timestamp = System.currentTimeMillis();
			stringaRandom += separatore + timestamp;
		}

		// restituisco la stringa generata
		return stringaRandom;
	}

	// metodo main come esempio
	public static void main(String[] args) {

		// creo un oggetto GeneraCodiceRandom e lo chiamo codice
		GeneraCodiceRandom codice = new GeneraCodiceRandom();

		// creo 10 stringhe random come esempio
		for (int i = 1; i <= 10; i++) {
			/*
			 * parametri: numeroCaratteriRandom = il numero di caratteri random
			 * da generare; conSpeciali = true/flase per specificare se vogliamo
			 * includere dei caratteri speciali; conTimestamp = true/false per
			 * specificare se vogliamo includere un timestamp; separatore = un
			 * carattere da utilizzare per dividere la stringa random dal
			 * timestamp. Se non si vuole utilizzare nessun separatore basta
			 * impostarlo uguale ad una stringa vuota = ""
			 */

			/*
			 * Ad ogni ciclo del "for", richiamo il metodo GeneraCodice
			 * dell'oggetto "codice", e gli passo il numerico progressivo di
			 * caratteri random da generare.
			 */
			String generato = codice.GeneraCodice(i, true, true, "||");
			// output della stringa appena creata.
			System.out.println("[" + i + "]\t" + generato);
		}
	}
}

How to:

//creo l'istanza della classe
GeneraCodiceRandom mioGeneratore = new GeneraCodiceRandom();

//sfrutto il metodo GeneraCodice per creare un codice e lo assegno
//alla variabile "codiceGenerato"
String codiceGenerato = mioGeneratore.GeneraCodice(i, true, true, "||");

//scrivo la variabile "codiceGenerato" in console
System.out.println(codiceGenerato);

Spero possa essere utile a qualcuno.
Alla prossima…

Potrebbero interessarti anche...