Numar aleator cu cifre distincte

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Komfort
Mesaje:157

Numar aleator cu cifre distincte

buna ziua
Asi dori sa aflu cum pot genera un nr la intamplate cu rand(), cu cifre distincte ?
Multumesc

MarPlo Mesaje:4343
Salut
Din documentatia de la PHP, functia mt_rand() e mai rapida decat rand() .
Daca vrei sa obtii un numar aleator cuprins intre un minim si maxim, poti folosi asa:

Cod: Selectaţi tot

$min = 123;
$max = 123456;
echo mt_rand($min, $max);
 
Daca vrei un numar aleator dintr-o lista de numere create intr-un array, poti folosi array_rand() , ca in acest exemplu:

Cod: Selectaţi tot

$nrs = array(123, 345, 67, 894, 673, 128, 9864, 3678, 654);
$nr = $nrs[array_rand($nrs)];
echo $nr;
 

Komfort Mesaje:157
Da dar...ma refer la generarea unui numar de 4 cifre rand(1000,9999); problema e ca ar putea sa-mi dea si un numar cu 2 sau 3 sau cu toate 4 cifre la fel.
Eu vreau distincte intre ele. Multumesc.

Edit:
Am adaugat intrun array 9000 de numere, oare sa fie vreo problema in a extrage unul aleator din el, cu:

Cod: Selectaţi tot

$nr = $numere[array_rand($numere)];
Gata am rezolvat.
Multumesc.

MarPlo Mesaje:4343
Se poate folosi si urmatoarea functie, daca vrei un cod mai compact, si sa obtii numarul intre un $minim si $maxim.

Cod: Selectaţi tot

<?php
// function to get aleator number with no repeat digits ( www.coursesweb.net )
// returns an aleator number between $min and $max, with distinct digits
function getDistinctNr($min, $max) {
  $nrstr = (string) mt_rand($min, $max);     // get aleator number, converted into string
  $n_nr = strlen($nrstr);           // number of characters
  $setnr = array();           // to store distinct digits that will form the returned number

  // traverse $nrstr to add in $setnr its distinct digits
  // if number already in $setnr, traverse 0 to 9 to define another distinct number
  for($i=0; $i<$n_nr; $i++) {
    if(!in_array($nrstr[$i], $setnr)) $setnr[] = $nrstr[$i];
    else {
      for($i2=0; $i2<10; $i2++) {
        if(!in_array($i2, $setnr)) {
          $setnr[] = $i2;
          break;
        }
      }
    }
  }

  return implode('', $setnr);
}

// Test
$nr = getDistinctNr(1000, 9999);
echo $nr;
?>

Subiecte similare