web-dev-qa-db-fra.com

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. 

23
AAA
$six_digit_random_number = mt_Rand(100000, 999999);

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

102
Charles

Si vous voulez qu'il commence par 000001 et allez à 999999:

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

Remarquez, c'est stocké sous forme de chaîne.

33
Tim Cooper
<?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 sur mon site web.

8
virus

Un autre:

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

Quoi qu'il en soit, pour des raisons de singularité, 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 chiffres seront utilisés, le nombre de "tentatives" (et donc le temps nécessaire) pour obtenir un nouveau numéro augmentera, ce qui peut entraîner de très longs délais et gaspillage de ressources du processeur.

Je conseillerais, si possible, de garder trace des identifiants disponibles dans un tableau, puis de choisir au hasard un identifiant parmi ceux disponibles, en procédant comme ceci (si la liste d'identifiants 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'identifiants est stockée dans une base de données.

8
Frosty Z

En voici un autre:

substr(number_format(time() * Rand(),0,'',''),0,6);
4
law.vzmk

Cela générera un nombre aléatoire de 6 chiffres

<?php
    mt_Rand(100000,999999);
?>

3
L Ananta Prasad

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

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

Deuxième fois dans la boucle Générez un nombre aléatoire compris entre 100 000 et x1 appelez cet xt2, puis générez un nombre aléatoire compris entre x1 et 999,999 appelez cet xt3, puis choisissez au hasard x2 ou x3, appelez-le x2

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

méfiez-vous des points d'extrémité, méfiez-vous également de x1

1
rossb83
        $characters = '123456789';
        $charactersLength = strlen($characters);
        $randomString = '';
            for ($i = 0; $i < 6; $i++) {
                $randomString .= $characters[Rand(0, $charactersLength - 1)];
            }
        $pin=$randomString; 
1

Dans PHP 7.0+, je suggérerais random_int($min, $max) over mt_Rand().

$randomSixDigitInt = \random_int(100000, 999999);
0
Yes Barry