Генератор number
Берите его, когда нужно целое число — id, код, цена, возраст — в заданном диапазоне; либо строка ровно из N цифр (даже сотни или тысячи — куда больше, чем вмещает обычный числовой тип).
У генератора number несколько режимов, и выбираются они тем, какие из атрибутов
value и length заданы. На этой странице разобран каждый.
Кратко
| Атрибут | Обязательный | Что делает |
|---|---|---|
value | нет | bit, диапазон "100..999" или список диапазонов |
length | нет | Фиксированная ширина "10", диапазон "2-10" или группы "2,10-12" |
percent | нет | Доли для групп length, например length="2,10-12" percent="85,15" |
first_zero | нет | true / false — разрешён ли ведущий ноль |
include | нет | Добавить числа или диапазоны к value |
exclude | нет | Убрать числа или диапазоны из value |
Без value и без length генератор number выдаёт одну случайную цифру
0–9.
7 2 9 0 4
Один бит
value="bit" даёт случайный 0 или 1 — удобно для булевоподобных флагов.
<gen type="number" value="bit"/>
1 0 1 1 0
Диапазон
Задайте value диапазоном от..до (включительно) — и получите случайное целое
внутри.
<gen type="number" value="1000..9999"/>
7931 2608 4415 8842 1307
Два правила синтаксиса:
- Разделитель — всегда
.., никогда не одиночный дефис. - Одиночный
-внутриvalue— это знак минуса отрицательного числа, поэтому отрицательные диапазоны работают сразу:
<gen type="number" value="-500..-200"/>
-269 -451 -312 -208 -377
Ведущие нули сохраняются
Если диапазон записан с ведущими нулями, ширина сохраняется — удобно для кодов фиксированной ширины:
<gen type="number" value="0000..9999"/>
0770 0034 0983 7702 0208
Несколько диапазонов сразу
Передайте список диапазонов в скобках через запятую — TDC сначала случайно выбирает один диапазон, а затем число внутри него.
<gen type="number" value="[0..100],[345..678],[1934..2026]"/>
73 512 1998 41 2007
В списке диапазонов равновероятен каждый диапазон, а затем равновероятно
число внутри выбранного диапазона — поэтому по всему набору отдельные числа
распределены неравномерно. Если нужен по-настоящему равномерный выбор по
диапазону минус пара «дыр», используйте exclude (ниже).
Фиксированная ширина через length (паддинг)
Когда заданы оба атрибута — value и length, — length работает как
ширина вывода: короткие числа дополняются ведущими нулями, длинные печатаются как
есть. Сид один, поэтому числа те же — меняется только ширина:
<gen type="number" value="1..999"/> <!-- сырьё -->
<gen type="number" value="1..999" length="4"/> <!-- та же серия, ширина 4 -->
сырьё length="4" 770 -> 0770 350 -> 0350 79 -> 0079 959 -> 0959 208 -> 0208
Числа не изменились — их просто дополнили до четырёх цифр. В этом режиме паддинга ведущий ноль по умолчанию разрешён (чтобы короткое значение могло добрать ширину).
Режим цифровой строки
Задайте length без value — и генератор переключает режим: он собирает
результат по одной цифре и всегда возвращает строку ровно такой длины. Это не
JavaScript-число, а текст, поэтому можно генерировать идентификаторы на сотни и
тысячи цифр.
<gen type="number" length="10" first_zero="true"/>
7702701363 3682926087 0220609313 9277428409 2165957920
Здесь first_zero="true" разрешает ведущий ноль (см. третью строку —
0220609313). Без него первая цифра в этом режиме никогда не бывает нулём.
Переменная длина
length сам может быть диапазоном или группами с долями:
<gen type="number" length="2-10"/> <!-- случайная длина 2..10 -->
<gen type="number" length="2,10-12" percent="85,15"/> <!-- 85% коротких, 15% длинных -->
length="2-10" -> 70270136 length="2,10-12" 85/15 -> 77
Здесь percent работает точно так же, как в text: при
count="100" ровно 85 значений будут длины 2, а 15 — длины 10–12.
first_zero — управление ведущим нулём
first_zero решает, может ли первая цифра быть 0. Значение по умолчанию
зависит от режима:
- Режим паддинга (с
value): ведущий ноль по умолчанию разрешён, чтобы паддинг мог добрать ширину.first_zero="false"его запрещает — тогда TDC берёт значение, у которого и так хватает цифр:
<gen type="number" value="0..9999" length="4"/> <!-- ноль ок -->
<gen type="number" value="0..9999" length="4" first_zero="false"/> <!-- ноль нет -->
по умолчанию first_zero="false" 7701 -> 7701 3494 -> 3494 0785 -> 2379 9597 -> 9597 2078 -> 2078
Только 0785 (единственное значение, начинавшееся с нуля) заменено на
полноценное четырёхзначное 2379; всё остальное и так не имело ведущего нуля и
осталось нетронутым.
- Режим цифровой строки (без
value): ведущий ноль по умолчанию запрещён. Передайтеfirst_zero="true", когда строка может начинаться с нуля (десятизначный пример выше).
Добавить и убрать числа: include / exclude
Чтобы не расписывать список поддиапазонов ради пары исключений, используйте
exclude (убрать) и include (добавить). Значения — числа или диапазоны a..b
через запятую.
<gen type="number" value="0..9" exclude="3"/> <!-- 0–9 кроме 3 -->
<gen type="number" value="1000..9999" exclude="1234,5678"/> <!-- id без этих двух -->
<gen type="number" value="0..100" exclude="40..60"/> <!-- без середины -->
<gen type="number" value="0..9" include="100"/> <!-- 0–9 и ещё 100 -->
value="0..9" exclude="3" -> 7 value="1000..9999" exclude="1234,5678" -> 7931 value="0..100" exclude="40..60" -> 82 value="0..9" include="100" -> 8
Два момента, которые стоит знать:
- Выбор честно равномерный по всему, что осталось.
value="0..9" exclude="3"— это ровно 1/9 на каждое из девяти оставшихся чисел, в отличие от списка диапазонов, где равновероятны диапазоны, а не отдельные числа. - За
excludeпоследнее слово. Итоговый набор —(база ∪ include) − exclude, так что число, добавленное черезincludeи убранное черезexclude, исчезает. Если после модификаторов ничего не остаётся — это ошибкаTDC087.
Этим модификаторам нужен value с диапазоном; на режим цифровой строки
(только length) они не действуют.
Подводные камни, всё вместе
- Диапазоны записываются через
.., а не через-(одиночный-— знак минуса). - Ширина с ведущими нулями сохраняется:
value="0000..9999"→"0034". - Режим цифровой строки возвращает текст, а не число — безопасно для огромных id.
- В списке диапазонов равномерны диапазоны, а не отдельные числа — для
равномерного выбора с «дырами» используйте
exclude.
См. также
lengthиfirst_zeroв справочнике атрибутов.- Text — тот же механизм точного
percent, но для списков.