Вопрос PHP Loop - PullRequest
       3

Вопрос PHP Loop

3 голосов
/ 03 июля 2011

Я создаю сценарий, который создает случайный защитный номер для пользователя, и я ищу способы, которыми я могу его завершить.

Мне нужен защитный номер из 7 цифр, но он не содержит0. Но при использовании rand(1111111,9999999) все еще существует вероятность того, что 0 окажется внутри этого числа, мне было интересно, какой цикл лучше всего проверить, и какую функцию я бы использовал для проверки существования 0в строке?

Ответы [ 4 ]

5 голосов
/ 03 июля 2011

Этот код должен делать то, что вам нужно:

$num = '';
for ($i = 1; $i <= 7; $i++)
    $num .= rand(1, 9);
$num = (int) $num;

Он случайным образом генерирует цифры по одной и строит из них строку. Затем он изменяет строку на целое число.

4 голосов
/ 03 июля 2011

Не могли бы вы составить случайное число от 1 до 9 7 раз?

rand(1,9)
1 голос
/ 03 июля 2011

Использование while для проверки не поможет, так как всего будет 9 ^ 7 случаев. Вы не знаете, какой случай вы получите в следующий раз. Так что лучше использовать ранд 7 раз.

<?php 
function myRand($length){
$ans=0;
for($i=0;$i<$length;$i++){
$ans=$ans*10+rand(1,9);
}
return $ans;
}

echo myrand(7);
?>
0 голосов
/ 03 июля 2011

Решение на основе базы 9.

$p = array();
$p[0] = 1;
for ($i=1; $i<=6; $i++):
    $p[$i] = $p[$i-1] * 9;
endfor;

$max = $p[6] * 9 - 1;
$rand = rand(0,$max);

$ret = array();
for ($i=6; $i>=0; $i--):
    $tmp = $rand / $p[$i];
    $tmp = floor($tmp);
    $rand = $rand - $p[$i] * $tmp;
    $ret[] = (string)($tmp + 1);
var_dump($tmp);
endfor;

$ret = implode($ret);
var_dump($ret);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...