Ответ 1
$six_digit_random_number = mt_rand(100000, 999999);
Как и все числа от 100 000 до 999 999, конечно, шесть цифр.
Как я могу сгенерировать 6-значный уникальный номер? У меня есть механизмы проверки для проверки дубликатов записей.
$six_digit_random_number = mt_rand(100000, 999999);
Как и все числа от 100 000 до 999 999, конечно, шесть цифр.
Если вы хотите, чтобы он начинался с 000001
и переходите к 999999
:
$num_str = sprintf("%06d", mt_rand(1, 999999));
Помните, что он хранится в виде строки.
Другой:
str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);
В любом случае, для уникальности вам нужно будет проверить, что ваш номер еще не был использован.
Вы скажете, что вы проверяете дубликаты, но будьте осторожны, так как при использовании большинства чисел количество попыток (и, следовательно, время) для получения нового номера будет увеличиваться, что может привести к очень длительным задержкам и истощению ресурсов ЦП.
Я бы посоветовал, если возможно, отслеживать доступные идентификаторы в массиве, затем произвольно выбирайте идентификатор среди доступных, делая что-то вроде этого (если список идентификаторов хранится в памяти):
$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--;
Вы можете сделать что-то подобное, даже если список идентификаторов хранится в базе данных.
<?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;
?>
Надеюсь, это сработает. Я использую ту же технику на своем веб-сайте.
Здесь еще один:
substr(number_format(time() * rand(),0,'',''),0,6);
Это приведет к генерации случайного 6-значного числа
<?php
mt_rand(100000,999999);
?>
$characters = '123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 6; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$pin=$randomString;
Я бы использовал алгоритм, грубая сила могла бы быть следующей:
Первый цикл: Создайте случайное число от 100 000 до 999999 и вызовите x1
Второй раз через цикл Создайте случайное число между 100 000 и x1, вызовите этот xt2, затем создайте случайное число между x1 и 999,999, вызовите этот xt3, затем произвольно выберите x2 или x3, вызовите этот x2
N-е время через цикл Создайте случайное число от 100 000 до x1, x1 и x2 и от x2 до 999,999 и так далее...
следить за конечными точками, также следить за x1
<?php echo rand(100000,999999); ?>
вы можете создать случайное число
В PHP 7. 0+ я бы предложил random_int($min, $max)
вместо mt_rand()
.
$randomSixDigitInt = \random_int(100000, 999999);
с php.net:
предосторожность Эта функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам нужно криптографически безопасное значение, рассмотрите возможность использования взамен random_int(), random_bytes() или openssl_random_pseudo_bytes().
Так что это зависит в основном от контекста. Я также добавлю, что в PHP 7.1.0 rand()
теперь является псевдонимом mt_rand()
.
ура