Computer finestre Internet

Genera numeri casuali all'interno di un intervallo. Applicazione della funzione casuale PHP miglior generatore di numeri casuali PHP

Esegue l'inizializzazione del generatore di numeri casuali. Sintassi:

vuoto srand (int seed)

Inizializza il generatore di numeri casuali con il valore seme.

Srand((doppio) microtempo()*1000000);
$casuale = randa();
eco $casuale;

GETRANDMAX

Restituisce il numero casuale più grande possibile. Sintassi:

int getrandmax()

Questa funzione restituisce il valore massimo che può essere ottenuto utilizzando la funzione di generazione di numeri casuali rand().

Di solito è 32767

Genera un numero casuale. Sintassi:

Int rand(])

Quando viene chiamata con i parametri min e max opzionali, questa funzione genera un numero casuale che si trova all'interno di quei parametri, inclusi. Se i parametri min e max sono assenti, viene restituito un numero compreso tra 0 e RAND_MAX.

Per corretto funzionamento questa funzione, prima di utilizzarla, è necessario inizializzare il generatore di numeri casuali con la funzione srand().

lcg_value()

Generatore di numeri pseudo casuali LCG (PHP 4, PHP 5)

Descrizione:

Float lcg_value(void)

lcg_value() restituisce un numero pseudo-casuale nell'intervallo (0, 1). La funzione combina due generatori c 2^31 - 85 e 2^31 - 249 in un periodo.

mt_getrandmax()

Mostra il valore casuale più grande possibile (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descrizione:

int mt_getrandmax(vuoto)

Mostra il valore massimo che può essere restituito dalla funzione mt_rand().

mt_rand()

Genera il miglior valore casuale (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descrizione:

int mt_rand()

Molti vecchi generatori di numeri casuali hanno prestazioni discutibili e sono lenti. PHP utilizza il generatore di numeri casuali della funzione rand() per impostazione predefinita. La funzione mt_rand() ne è un buon sostituto. Utilizza un generatore di numeri casuali che è 4 volte più veloce di rand() e utilizza Mersenne Twister.

Chiamato senza gli argomenti min e max opzionali, mt_rand() restituisce un valore pseudo-casuale compreso tra 0 e RAND_MAX. Se devi ottenere, ad esempio, valori casuali compresi tra 5 e 15 inclusi, cerca mt_rand (5, 15).

mt_rand() esempio

eco mt_rand() . "\n";
eco mt_rand() . "\n";

echo mt_rand(5, 15);
?>

Il risultato dell'esecuzione di questo esempio sarà qualcosa del genere:

1604716014
1478613278
6

Commento

Commento: Nelle versioni precedenti alla 3.0.7, il secondo parametro della funzione specificava un intervallo di numeri. Ad esempio, per ottenere numeri casuali compresi tra 5 e 15, queste versioni richiedono che sia specificata la funzione mt_rand(5, 11).

mt_srand()

Imposta il valore iniziale miglior generatore numeri casuali (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descrizione:

Vuoto mt_srand()

Imposta il valore iniziale del generatore di numeri casuali utilizzando il seme. A partire da PHP 4.2.0, il seed è facoltativo e le impostazioni predefinite per i valori casuali vengono omesse.

mt_srand() esempio

// seme con microsecondi
funzione make_seed()
{
list($usec, $sec) = esplode(" ", microtime());
return (flottante) $sec + ((flottante) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>

Commento: A partire da PHP 4.2.0, non è più necessario inizializzare il generatore di numeri casuali con le funzioni srand() o mt_srand(), poiché ora ciò avviene automaticamente.

Per generare un numero casuale, puoi usare la funzione PHP rand() o mt_rand(). L'obbligo di utilizzare numeri casuali sorge spesso in pratica per nominare variabili, file, creare informazioni chiave e garantire la sicurezza.

Casualità e unicità

La funzione casuale PHP è disponibile in due versioni: rand() e mt_rand(). Si ritiene che l'algoritmo nel primo caso sia più semplice e generi numeri pseudo-casuali. La seconda opzione ha un algoritmo più veloce e noto caratteristiche matematiche. Nella maggior parte dei casi in cui è necessario ottenere un numero casuale, è possibile utilizzare una serie di chiamate casuali PHP per ottenere una combinazione univoca di numeri.

Se prendiamo come base i numeri da 1 a 26 o da 1 a 32 e li otteniamo casualmente, possiamo formare informazioni chiave come una sequenza di lettere latine o cirilliche. In questo caso, PHP random è un modo per generare una sequenza di informazioni alfabetiche, ad esempio allo scopo di testare canali di comunicazione o algoritmi.

Un numero casuale è raramente unico, poiché può apparire molte volte secondo la legge di distribuzione di una variabile casuale. Ma se uniamo, in particolare, lo statico variabile PHP& Math.random del linguaggio JavaScript, quindi puoi ottenere un numero casuale univoco reale che non si ripeterà nel tempo.

Utilizzo della funzione tempo

La funzione tempo, sia PHP che JavaScript, consente di formare combinazioni univoche di numeri, raramente quando un numero sufficientemente grande di eventi può verificarsi in un determinato momento e valore casuale si ripeterà.

Applicando PHP random nell'intervallo di secondi o millisecondi, con un'ampia gamma di valori possibili, puoi ottenere combinazioni casuali uniche di numeri o lettere. Cos'altro?

Combinando il valore della funzione tempo, un numero in costante crescita e PHP random o, è possibile garantire una sicurezza affidabile dei canali di comunicazione client e server, creare codici univoci per le variabili, genera eventi imprevedibili negli algoritmi.

generatore casuale Numeri PHP- un'ottima soluzione per la maggior parte delle attività, soprattutto quando è necessario ottenere rapidamente un risultato di alta qualità a costi minimi. L'uso delle funzioni rand() e mt_rand in combinazione con serie di numeri o valori temporali a crescita sequenziale consente di ottenere numeri casuali, sia ripetuti in valori che univoci.

Ciao a tutti! In questo articolo vedremo cosa c'è di nuovo per generare numeri casuali in PHP 7.1.

Questo aggiornamento è avvenuto in modo invisibile agli sviluppatori, ma ha migliorato il linguaggio di programmazione PHP nel campo della generazione di numeri casuali.

Per quanto si sa, in PHP possiamo usare la funzione randa (min, max) per generare numeri casuali:

echo rand(7, 17);

Se ora aggiorni la pagina, otterrai ogni volta un nuovo numero casuale.

Ma non tutto è così semplice come potrebbe sembrare. Il fatto è che, a seconda di cosa stai generando il numero casuale, la funzione randa() usi sistemi diversi generazione. Quelli. dipende dal sistema in cui viene utilizzato. Alcuni sistemi possono utilizzare metodi di generazione debole, quindi otterrai numeri che non sono completamente casuali.

A PHP 7.1 questo problema è stato risolto ed è stata aggiunta una funzionalità mt_rand():

echo mt_rand(7, 17);

Questa funzione funziona molto meglio, inclusa la sicurezza. Ciò che è anche importante sapere è che se si utilizza la funzione randa() in PHP 7.1, verrà automaticamente sovrascritto da mt_rand(). Quelli. randa() ora solo un alias per mt_rand().

Molte altre funzioni per ottenere risultati casuali sono state migliorate PHP 7.1. Ad esempio, diamo un'occhiata a come possiamo ottenere un valore casuale da un array:

$nomi = ["Ivan", "Alexander", "Vasiliy"];
eco $nomi;

Quelli. tutte le funzioni come questa sono state migliorate per produrre numeri casuali migliori PHP 7.1. Sì, questo aggiornamento è passato inosservato, ma qualunque sia la lingua in cui scrivi, è molto importante capire cosa sta succedendo all'interno di una funzione e come si comporta.

E ora prendiamo la funzione di generazione della password già pronta e scriviamo uno script per ripristinare o creare una nuova password per gli utenti del tuo sito.

Script di recupero password

Come si scrive di solito un copione?

Come sempre, viene redatto uno schema passo dopo passo, cosa dobbiamo fare passo dopo passo. Tutto accade in un file, promemoria.php

1. Eseguire lo script solo se è presente una determinata variabile, ad esempio $action;

2. Per avviare il processo di generazione della password, l'utente specifica l'indirizzo email $_POST[`ema‘l`]; Per semplificare il codice, assegniamo questo valore alla variabile $email.

3. Utilizzando le espressioni regolari, controlliamo tutti i caratteri per assicurarci che l'utente abbia specificato correttamente l'indirizzo e-mail. In caso contrario, viene visualizzato un errore, interrompere lo script. Se tutto è corretto, andiamo avanti.

4. Cerchiamo nel database, nel nostro caso, nella tabella degli utenti, un utente con tale indirizzo postale. In caso contrario, emettiamo un errore che non esiste un tale indirizzo nel database e interrompiamo lo script.

5. C'è un utente con un tale indirizzo nel database, andare avanti e avviare la funzione di generazione di una nuova password. Inoltre, all'indirizzo email, otteniamo un ID utente univoco dal database e lo scriviamo nella variabile $id;

Tecnicamente, il termine "generatore di numeri casuali" è assurdo, poiché i numeri stessi non sono casuali. Ad esempio, 100 è un numero casuale? E 25? Ciò che questo termine significa realmente è che viene creata una sequenza di numeri che appare in modo casuale. Genera di più problema complesso: cos'è una sequenza di numeri casuali? L'unica risposta corretta è: una sequenza di numeri casuali è una sequenza in cui tutti gli elementi non sono correlati. Questa definizione porta a un tale paradosso che qualsiasi sequenza può essere casuale o non casuale, a seconda di come questa sequenza viene ottenuta. Ad esempio, la seguente stringa di numeri
1 2 3 4 5 6 7 8 9 0
ricevuto mediante stampa linea superiore tastiere in ordine, quindi la sequenza non può essere considerata generata casualmente. E se ottenessi la stessa sequenza tirando fuori dal barilotto le palline da tennis numerate. In questo caso, questa è già una sequenza generata casualmente. Questo esempio mostra che la casualità di una sequenza dipende da come è stata ottenuta e non da se stessa.

Ricorda che la sequenza di numeri generata da un computer è deterministica: ogni numero, tranne il primo, dipende dai numeri precedenti. Tecnicamente, ciò significa che solo una sequenza di numeri quasi casuale può essere generata da un computer, ad es. in effetti, non sono veramente casuali. Tuttavia, questo è sufficiente per la maggior parte dei problemi e tali sequenze saranno chiamate casuali per semplicità. Un metodo molto interessante è stato sviluppato da John von Neumann; è spesso indicato come RMS. In questo metodo, il numero casuale precedente viene quadrato, quindi le cifre centrali vengono estratte dal risultato. Ad esempio, se stai creando numeri con tre cifre e il numero precedente era 121, quadrando il risultato è 14641. Estraendo le tre cifre centrali si ottiene il numero casuale successivo 464. Lo svantaggio di questo metodo è che ha una ripetizione molto breve periodo chiamato ciclo. Per questo motivo, questo metodo non è utilizzato oggi. Metodi moderni generare numeri casuali è molto più difficile.

Numeri casuali in PHP

PHP ha due gruppi di funzioni per lavorare con numeri casuali. Esternamente, possono essere distinti dal prefisso mt_ per tutte le funzioni di uno dei gruppi.

Funzionalità deprecate
funzione randa. Restituisce un numero intero da zero a RAND_MAX (che è 32767). Può avere due parametri interi opzionali: se sono specificati, viene generato un numero casuale dal primo parametro al secondo.

echo rand(); echo rand(1.100); // Assegna un numero casuale da 1 a 100

funzione srand. Specifica la sequenza di numeri casuali restituiti dalla funzione rand. Ha un parametro intero: per valori diversi di questo parametro, verrà emesso rand sequenze diverse numeri. La funzione srand deve essere chiamata solo una volta, prima di tutte le chiamate alla funzione rand. Esempio di utilizzo:

Srand(1288); // Inizializzazione del generatore di numeri casuali for($i=0; $i<5;$i++){ echo rand(); echo "
"; }

Attenzione! A partire da PHP 4.2.0, non è necessario chiamare srand() - PHP lo fa automaticamente.
getrandmax(). Restituisce il valore del numero casuale massimo (32767).

Funzioni del secondo gruppo (con prefisso mt_)
I loro nomi e le loro azioni sono simili alle funzioni del primo gruppo: mt_rand, mt_srand e mt_getrandmax. La differenza principale è che i numeri casuali sono presi da un intervallo più ampio: da 0 a 2 19937 − 1. Inoltre, queste funzioni funzionano molto più velocemente delle loro controparti precedenti, poiché utilizzano il generatore di numeri casuali Mersenne Twister, sviluppato nel 1997 da scienziati giapponesi . Da qui il prefisso mt_ (Mersenne Twister).
Esempio di utilizzo:

// Genera un numero casuale compreso tra 1000 e 2000 echo mt_rand(1000, 2000);

Numeri casuali in JavaScript

Numero casuale in JavaScript può essere generato con Math.random(). Tuttavia, sarà un numero frazionario compreso tra 0 e 1 (escluso 0 e 1). Per generare un numero intero casuale nell'intervallo desiderato, è necessario scrivere la propria funzione