2013-09-28 3 views
4

У меня есть PHP-скрипт, который создает случайный 10-значный номер заказа:предотвратить случайный PHP генератор от включая нули

// Assign order number length 
$digits = 10; 

// Create random order number to be stored with this order 
$order_number = rand(pow(10, $digits-1), pow(10, $digits)-1); 

Как предотвратить это когда-либо, включая цифру нуль 0 в случайном 10 значное число? Заранее спасибо!

+1

Почему вы используете 'pow()' в качестве аргумента для 'rand()' для создания случайных чисел? – djot

+0

@djot: рассчитать диапазон на основе заданного количества цифр? – Adassko

ответ

1

Вы можете использовать простую функцию, как это:

function getRandom($length) { 
    $numbers = ''; 
    for($i = 0; $i < $length; $i++) { 
     $numbers .= rand(1, 9); 
    } 
    return $numbers; 
} 

echo getRandom(10); 
4

Вы можете сделать фантазии преобразования базы, но в конце концов, самый простой способ, чтобы просто получить строку:

function random_string($count, $available) { 
    $result = ''; 
    $max = strlen($available) - 1; 

    for($i = 0; $i < $count; $i++) { 
     $result .= $available[rand(0, $max)]; 
    } 

    return $result; 
} 

… 
$order_number = random_string($digits, '123456789'); 
+0

Это не отвечает на вопрос; если 'rand (0, 9)' возвращает '0', число будет содержать 0. Я думаю, вы имели в виду' rand (1, 9) '. –

+1

Или просто сохраните нуль из строки '$ digits' ... – poke

+0

Тогда вам нужно будет поменять вызов' rand() 'на rand (0, 8)' :) Лично я бы не стал беспокоиться о '$ цифры и использовать результат 'rand()' непосредственно (см. мой ответ). –

2

Попробуйте следующее: D

function getRandom($from, $to){ 
    $num = rand($from, $to); 
    $have_zero = true; 
    $strNum = strval($num); 
    while ($have_zero){ 
     $have_zero = false; 
     for ($i = 0; $i < sizeof($strNum); $i++){ 
      if ($strNum[$i] == '0'){ 
       $have_zero = true; 
       $num = rand($from, $to); 
       $strNum = strval($num); 
       break; 
      } 
     } 
    } 
    return $num; 
} 
getRandom(1111111111, 9999999999); 
1

Я бы выбрал функцию.

<?php 

function myRandomNumberWithoutZeros($digits) 
{ 
    $result = str_replace("0", "",rand(pow(10,$digits-1), pow(10, $digits)-1).""); 
    $resultLength = strlen($result); 
    if($resultLength < $digits) 
    { 
     return intval($result.myRandomNumberWithoutZeros($digits-$resultLength)); 
    } 
    return intval($result); 
} 
echo myRandomNumberWithoutZeros(10); 

?> 
3

Вы можете рассматривать его как число основания 9

base_convert(rand(0, pow(9, $digits) - 1), 10, 9) 

Это даст вам номер с цифрами от 0 до 8.

Теперь просто добавьте 1 к каждой цифре, чтобы сделать его 1 до 9

(pow(10, $digits) - 1)/9 

предоставит вам номер, заполненный теми. Теперь просто добавьте его в свой предыдущий номер, и вот вы:

$digits = 10; 

$order_number = (pow(10, $digits) - 1)/9 + base_convert(rand(0, pow(9, $digits) - 1), 10, 9); 
+0

умный, но 9 + 1 = 10 –

+0

и откуда это взялось? – Adassko

+0

О, путь, база 9! Я возвращаю его, умный. =) –

Смежные вопросы