Comment puis-je générer un numéro unique à 6 chiffres?

Comment puis-je générer un numéro unique à 6 chiffres? J'ai des mécanismes de vérification en place pour vérifier les entrées en double.

21
demandé sur Ryan Leonard 2011-03-29 00:50:49

10 réponses

$six_digit_random_number = mt_rand(100000, 999999);

Comme tous les nombres entre 100 000 et 999 999 sont à six chiffres, bien sûr.

95
répondu Charles 2011-03-28 20:52:24

Si vous voulez qu'il démarre au 000001 et aller à 999999:

$num_str = sprintf("%06d", mt_rand(1, 999999));

Attention, il est stocké sous forme de chaîne.

29
répondu Tim Cooper 2014-09-15 18:19:29
<?php
$file = 'count.txt';

//get the number from the file
$uniq = file_get_contents($file);

//add +1
$id = $uniq + 1 ;

// add that new value to text file again for next use
file_put_contents($file, $id);

// your unique id ready
echo $id;
?>

J'espère que cela fonctionnera bien. j'utilise la même technique dans mon site web.

8
répondu virus 2015-10-19 16:40:36

Un autre:

str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);

Quoi qu'il en soit, pour l'unicité, vous devrez vérifier que votre numéro n'a pas déjà été utilisé.

Vous dites que vous vérifiez les doublons , mais soyez prudent car lorsque la plupart des numéros seront utilisés, le nombre de "tentatives" (et donc le temps nécessaire) pour obtenir un nouveau numéro augmentera, ce qui entraînera peut-être de très longs retards et gaspillera des ressources CPU.

Je conseillerais, si possible, de garder une trace des identifiants disponibles dans un tableau, puis choisissez au hasard un ID parmi ceux disponibles , en faisant quelque chose comme ceci (si la liste des ID est conservée en mémoire):

$arrayOfAvailableIDs = array_map(function($nb) {
    return str_pad($nb, 6, '0', STR_PAD_LEFT);
}, range(0, 999999));

$nbAvailableIDs = count($arrayOfAvailableIDs);

// pick a random ID

$newID = array_splice($arrayOfAvailableIDs, mt_rand(0, $nbAvailableIDs-1), 1);
$nbAvailableIDs--;

Vous pouvez faire quelque chose de similaire même si la liste D'ID est stockée dans une base de données.

8
répondu Frosty Z 2017-06-26 09:43:37

En voici un autre:

substr(number_format(time() * rand(),0,'',''),0,6);
4
répondu law.vzmk 2013-06-05 17:38:23

J'utiliserais un algorithme, la force brute pourrait être la suivante:

Première boucle: Générez un nombre aléatoire entre 100 000 et 999 999 et appelez-le x1

Deuxième fois dans la boucle Générer un nombre aléatoire entre 100 000 et x1 appeler ce xt2, puis générer un nombre aléatoire entre x1 et 999 999 appeler ce xt3, puis choisir au hasard x2 ou x3, appeler ce x2

Nième fois dans la boucle Générer un nombre aléatoire entre 100 000 et x1, x1 et x2, et x2 par 999 999 et ainsi de suite...

Attention aux points de terminaison, aussi attention à x1

3
répondu rossb83 2011-03-28 20:56:33

Cela va générer un nombre aléatoire à 6 chiffres

<?php
    mt_rand(100000,999999);
?>
3
répondu L Ananta Prasad 2016-09-19 09:22:41

<?php echo rand(100000,999999); ?>

Vous pouvez générer un nombre aléatoire

1
répondu Manjeet Kumar Nai 2017-10-14 09:39:38
        $characters = '123456789';
        $charactersLength = strlen($characters);
        $randomString = '';
            for ($i = 0; $i < 6; $i++) {
                $randomString .= $characters[rand(0, $charactersLength - 1)];
            }
        $pin=$randomString; 
1
répondu THEMBO CHARLES LWANGA 2018-09-06 15:13:55

En PHP 7.0+ je dirais random_int($min, $max) plus mt_rand().

$randomSixDigitInt = \random_int(100000, 999999);
0
répondu Yes Barry 2018-09-11 21:36:00