Подтвердить что ты не робот

JavaScript, сгенерируйте случайный номер, который имеет 9 номеров в длину

Я ищу эффективный и элегантный способ генерации переменной JavaScript длиной 9 цифр:

Пример: 323760488

4b9b3361

Ответ 1

Вы можете сгенерировать 9 случайных цифр и объединить их все вместе.

Или вы можете вызвать random() и умножить результат на 1000000000:

Math.floor(Math.random() * 1000000000);

Так как Math.random() генерирует случайное число двойной точности от 0 до 1, у вас будет достаточно цифр точности, чтобы все еще иметь случайность в вашем наименее значимом месте.

Если вы хотите, чтобы ваш номер начинался с ненулевой цифры, попробуйте:

Math.floor(100000000 + Math.random() * 900000000);

Или блокнот с нулями:

function LeftPadWithZeros(number, length)
{
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }

    return str;
}

Или площадку, используя этот встроенный трюк.

Ответ 2

Почему бы не просто извлечь цифры из строкового представления Math.random()?

Math.random().toString().slice(2,11);
/*
Math.random()                         ->  0.12345678901234
             .toString()              -> "0.12345678901234"
                        .slice(2,11)  ->   "123456789"
 */

(требование состоит в том, что каждая точность javascript-реализации Math.random() не менее 9 знаков после запятой)

Ответ 3

Также...

function getRandom(length) {

return Math.floor(Math.pow(10, length-1) + Math.random() * 9 * Math.pow(10, length-1));

}

getRandom (9) = > 234664534

Ответ 4

Три метода, которые я нашел в порядке эффективности: (Тестовая машина работает с Firefox 7.0 Win XP)

parseInt(Math.random()*1000000000, 10)

1 миллион итераций: ~ 626 мс. Безусловно, самый быстрый - parseInt является нативной функцией и снова вызывает библиотеку Math. ПРИМЕЧАНИЕ. См. Ниже.

Math.floor(Math.random()*1000000000)

1 миллион итераций: ~ 1005 мс. Два вызова функций.

String(Math.random()).substring(2,11)

1 миллион итераций: ~ 2997мс. Три вызова функций.

А также...

parseInt(Math.random()*1000000000)

1 миллион итераций: ~ 362мс. ПРИМЕЧАНИЕ. Параметр parseInt обычно считается небезопасным для использования без параметра radix. См. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt или google "JavaScript: Хорошие детали". Однако, кажется, что параметр, переданный parseInt, никогда не будет начинаться с '0' или '0x', так как вход сначала умножается на 1000000000. YMMV.

Ответ 5

В одной строке (ish):

var len = 10;
parseInt((Math.random() * 9 + 1) * Math.pow(10,len-1), 10);

Шаги:

  • Мы генерируем случайное число, удовлетворяющее 1 ≤ x < 10.
  • Затем умножим на Math.pow(10,len-1) (число с длиной len).
  • Наконец, parseInt() для удаления десятичных знаков.

Ответ 7

Подумал, я бы взял удар по твоему вопросу. Когда я запустил следующий код, он работал у меня.

<script type="text/javascript">

    function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
    } //The maximum is exclusive and the minimum is inclusive
    $(document).ready(function() {

    $("#random-button").on("click", function() {
    var randomNumber = getRandomInt(100000000, 999999999);
    $("#random-number").html(randomNumber);
    });

</script>

Ответ 8

Math.random().toFixed(length).split('.')[1]

Использование toFixed позволяет вам установить длину больше, чем по умолчанию (кажется, генерирует 15-16 цифр после десятичной дроби. ToFixed позволит вам получить больше цифр, если они вам нужны.

Ответ 9

function rand(len){var x='';
 for(var i=0;i<len;i++){x+=Math.floor(Math.random() * 10);}
 return x;
}

rand(9);

Ответ 10

Math.floor(Math.random() * 899999999 + 100000000);

Ответ 11

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

Math.floor(Math.random()*8+1)+Math.random().toString().slice(2,10);

это приведет к генерации случайных значений между 100 000 000 и 999 999 999

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

Ответ 12

Я знаю, что ответ старый, но я хочу поделиться этим способом, чтобы генерировать целые числа или числа с плавающей запятой от 0 до n. Обратите внимание, что положение точки (случай с плавающей точкой) является случайным между границами. Номер является строкой, потому что ограничение MAX_SAFE_INTEGER, которое сейчас составляет 9007199254740991

Math.hRandom = function(positions, float = false) {

  var number = "";
  var point = -1;

  if (float) point = Math.floor(Math.random() * positions) + 1;

  for (let i = 0; i < positions; i++) {
    if (i == point) number += ".";
    number += Math.floor(Math.random() * 10);
  }

  return number;

}
//integer random number 9 numbers 
console.log(Math.hRandom(9));

//float random number from 0 to 9e1000 with 1000 numbers.
console.log(Math.hRandom(1000, true));

Ответ 13

function randomCod(){

    let code = "";
    let chars = 'abcdefghijlmnopqrstuvxwz'; 
    let numbers = '0123456789';
    let specialCaracter = '/{}$%&@*/()!-=?<>';
    for(let i = 4; i > 1; i--){

        let random = Math.floor(Math.random() * 99999).toString();
        code += specialCaracter[random.substring(i, i-1)] + ((parseInt(random.substring(i, i-1)) % 2 == 0) ? (chars[random.substring(i, i-1)].toUpperCase()) : (chars[random.substring(i, i+1)])) + (numbers[random.substring(i, i-1)]);
    }

    code = (code.indexOf("undefined") > -1 || code.indexOf("NaN") > -1) ? randomCod() : code;


    return code;
}

Ответ 14

У этого уже есть достаточно ответов?
Я думаю, нет. Таким образом, это должно надежно предоставить число из 9 цифр, даже если Math.random() решит вернуть что-то вроде 0.000235436:

Math.floor((Math.random() + Math.floor(Math.random()*9)+1) * Math.pow(10, 8))