Как сгенерировать случайное число фиксированной длины с помощью JavaScript?

Как сгенерировать случайное число фиксированной длины с помощью JavaScript?

Только полностью надежный ответ, который предлагает полную случайность, без потерь. Остальные до этого ответа все теряют в зависимости от того, сколько символов вы хотите. Чем больше вы хотите, тем больше они теряют случайность.

Они достигают этого, ограничивая количество возможных чисел, предшествующих фиксированной длине.

Так, например, случайное число фиксированной длины 2 будет 10 — 99. Для 3, 100 — 999. Для 4, 1000 — 9999. Для 5 10000 — 99999 и так далее. Как видно из схемы, она предполагает 10% -ную потерю случайности, потому что числа до этого невозможны. Почему?

Для действительно больших чисел (18, 24, 48) 10% — все еще много цифр, на которых можно потерять.

 function generate(n) { var add = 1, max = 12 - add; // 12 is the min safe number Math.random() can generate without it starting to pad the end with zeros. if ( n {amp}gt; max ) { return generate(max)   generate(n - max); } max = Math.pow(10, n add); var min = max/10; // Math.pow(10, n) basically var number = Math.floor( Math.random() * (max - min   1) )   min; return (""   number).substring(add); } 

Генератор допускает бесконечную длину без потери точности и с минимальными затратами.

Пример:

 generate(2) "03" generate(2) "72" generate(2) "20" generate(3) "301" generate(3) "436" generate(3) "015" 

Как вы можете видеть, даже ноль включается изначально, что является дополнительной потерей в 10% , кроме того факта, что числа до 10 ^ n невозможны.

Это сейчас всего 20%.

Кроме того, другие параметры имеют верхний предел количества символов, которые вы можете сгенерировать.

Хардкор (смеется):

 generate(100000); "" generate(100000).length === 100000 -{amp}gt; true 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector