Génerateur de nombre aléatoire [Résolu]

cs_samnick 1 Messages postés jeudi 26 février 2009Date d'inscription 1 novembre 2010 Dernière intervention - 1 nov. 2010 à 16:01 - Dernière réponse : cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention
- 7 nov. 2010 à 10:58
Bonjour à tous,
j'ai un problème je ne sais comment écrire un programme en php qui génère des nombres aléatoire constitué de 6 chiffres sans repetition.
merci pour votre bonne comprehension
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cod57 1660 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 1 nov. 2010 à 16:59
3
Merci
salut


<?php

$haz=array(1,
rand(2,3),
rand(4,5),
rand(6,7),
rand(8,9),0);

shuffle($haz);

$co="";
$i=0;

while($i<6){
$co.= $haz[$i];
  if(!in_array($co,$haz)){
  }else{}
$i++;
}

echo $co;

?>



c'est pour image captcha ?

a+

Merci cod57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cod57
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 2 nov. 2010 à 20:12
0
Merci
Salut,

Ca me semble bien lourd tout ça !

Un truc comme ça est plus simple, non ?
$aNb = array_rand(range(0, 9), 6);
echo implode($aNb);


Bon, j'imagine que l'aléatoire n'a qu'un intérêt hyper limité ici (dans le cas contraire on ne met pas en place ce genre de limitation et on utilise des caractères, min/maj, etc ...) mais il est à noter que cette solution est moins aléatoire que celle que tu proposais.

Sur 100 itérations, il peut y avoir jusqu'à 4 fois le même chiffre, contre 2 avec la tienne.
Sur 1000, 12 contre 2.
Sur 100000, 550 contre 25

Ce ne sont que des valeurs issues de tests rapides, histoire de se faire une idée.

Menfin l'aléatoire on s'en fout un peu dans le cas présent ^^

Je n'ai pas compris ça :
while($i<6){
$co.= $haz[$i];
  if(!in_array($co,$haz)){
  }else{}
$i++;
}


Pourquoi pas :
$co = implode($haz);

?

Cordialement,

Kohntark -
Commenter la réponse de kohntark
cod57 1660 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 2 nov. 2010 à 21:05
0
Merci
@Kohntark

je vient de découvrir l'existence de array_rand() !
Ne prend pas mon exemple à coeur (c'est de la bricole)
il marche c'est tout, je pense que samnick voulait seulement la non répétition

le while : en fait je verifie si un élément
avec indice $i du tableau $haz existe déjà sinon je saute
à une nouvelle itération jusqu'à avoir 6 indices
avec un contenu différent

Merci pour ton exemple
Commenter la réponse de cod57
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 2 nov. 2010 à 21:18
0
Merci
Ne prend pas mon exemple à coeur (c'est de la bricole)
il marche c'est tout, je pense que samnick voulait seulement la non répétition

Je ne le prends pas plus à coeur que ça
Mais plus c'est simple mieux c'est, non ?

le while : en fait je verifie si un élément
avec indice $i du tableau $haz existe déjà sinon je saute
à une nouvelle itération jusqu'à avoir 6 indices
avec un contenu différent

Heu, non, là tu ne fais rien d'autre que concaténer les valeurs d'un tableau ($haz) dans une chaîne ($co), ce qui revient au même qu'un implode(), mais en moins propre et moins efficace.
Tes lignes :
if(!in_array($co,$haz)){
  }else{}

ne servent à rien.

Bonne soirée,


Kohntark -
Commenter la réponse de kohntark
cod57 1660 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 3 nov. 2010 à 14:13
0
Merci
@Kohntark

oui

if(!in_array($co,$haz)){
}else{}

est inutile !
Commenter la réponse de cod57
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 nov. 2010 à 16:25
0
Merci
unicRandomizer class php
<?php
/* unicRandomizer

  construction $=new unicRandomizer(min, max, resetLimit)
    parameters :
      min   : int, def 0, minimal random interval
      max   : int, def 100, maximal random interval
      resetLimit : int, def 1000, cached values limit 
       
  reset()
    reset cache
    no parameters, returns the number of suppressed values
    
  setMin(min,reset)
    set minimal value of random interval
    parameters :
      min   : int, def 0
      reset : bool, def true
    return :
      0 setting ok, 1 setting corrected and ok, -1 error
      
  setMax(max,reset)
    set maximal value of random interval
    parameters :
      max   : int, def 0
      reset : bool, def true
    return :
      0 setting ok, 1 setting corrected and ok, -1 error

  setMinMax(min,max,reset)
    set minimal and maximal values of random interval
    parameters :
      min   : int, def 0
      max   : int, def 100
      reset : bool, def true
    return :
      array("min","max") values : 0 setting ok, 1 setting corrected and ok, -1 error

  rand() 
    generate unique random value
    no parameters, return random value in min>=value<=max interval  
*/
class unicRandomizer{
  protected $cache=array();
  protected $resetLimit=1000;
  protected $min=0;
  protected $max=100;
  public function __construct($min=0,$max=100,$resetLimit=1000){
    $this->cache=array();
    $this->resetLimit=$resetLimit;
    $this->min=$min;
    $this->max=$max;
    rand(0,100);
  }
  public function reset(){
    $ret=count($this->cache);
    $this->cache=array();
    return $ret;
  }
  public function setMin($min=0,$reset=true){
    if($min > $this->max){
      $this->min=$this->max;
      $this->max=$min;
      if($reset)$this->reset();
      return 1;
    } else {
      $this->min=$min;
      if($reset)$this->reset();
      return 0;
    }
    return -1;
  }
  public function setMax($max=100,$reset=true){
    if($max < $this->min){
      $this->max=$this->min;
      $this->min=$max;
      if($reset)$this->reset();
      return 1;
    } else {
      $this->max=$max;
      if($reset)$this->reset();
      return 0;
    }
    return -1;
  }
  public function setMinMax($min=0,$max=100,$reset=true){
    $ret=array(
      "min"=>$this->setMin($min,false),
      "max"=>$this->setMax($max,$reset)
    );
    return $ret;
  }
  public function rand(){
    $ret=rand($this->min, $this->max);
    while(in_array($ret, $this->cache)){
      $ret=rand($this->min, $this->max);
    }
    array_push($this->cache,$ret);
    if(count($this->cache) >= $this->resetLimit){
      $this->reset();
    }
    return $ret;
  }
}
?>



unicRandomizer demo php
<?php
include_once("unicRandomizer.class.php");
$ur=new unicRandomizer(100000,999999);
?>
<html>
<head>
</head>

<?php
for($i=0;$i<100;$i++){
  echo $ur->rand(),'
';
}
?>

</html>

________________________________________________________
Commenter la réponse de f0xi
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 4 nov. 2010 à 20:59
0
Merci
@Foxi :
Je n'ai que parcouru, mais :
Je ne vois pas en quoi cette classe réponds à la question :
"générer un nombre aléatoire constitué de 6 chiffres sans répétition"
L'objet c'est bien, mais dans ce cas, heu ... ça n'apporte rien.


Kohntark -
Commenter la réponse de kohntark
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 7 nov. 2010 à 10:58
0
Merci
Bonjour,

Pour une question PHP, merci de poster sur phpcs.com dans un thème PHP et non dans le bar.

[ Déplacé sur phpcs ]
Commenter la réponse de cs_rt15

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.