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.
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.
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.
<?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.
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.
En voici un autre:
substr(number_format(time() * rand(),0,'',''),0,6);
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
Cela va générer un nombre aléatoire à 6 chiffres
<?php
mt_rand(100000,999999);
?>
<?php echo rand(100000,999999); ?>
Vous pouvez générer un nombre aléatoire
$characters = '123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 6; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$pin=$randomString;
En PHP 7.0+ je dirais random_int($min, $max)
plus mt_rand()
.
$randomSixDigitInt = \random_int(100000, 999999);