Как сгенерировать случайную строку
Короткий ответ
Выбирайте случайные символы из набора в цикле:
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
let result = '';
for (let i = 0; i < 8; i++) {
result += chars[Math.floor(Math.random() * chars.length)];
}
console.log(result.length);Результат:
8Коротко и быстро
Для несекретного идентификатора хватит числа в системе счисления 36 — это цифры и латинские буквы:
const id = Math.random().toString(36).slice(2, 10);
console.log(/^[a-z0-9]+$/.test(id));Результат:
trueНадёжные коды и токены
Math.random() предсказуем. Для паролей, токенов и кодов подтверждения используйте crypto.getRandomValues():
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const bytes = crypto.getRandomValues(new Uint8Array(12));
const token = [...bytes].map((byte) => chars[byte % chars.length]).join('');
console.log(token.length);Результат:
12Частая ошибка
Math.random().toString(36) иногда даёт меньше символов, чем ожидается, поэтому не полагайтесь на её точную длину:
console.log((0.5).toString(36));Результат:
0.iФункции из этого ответа
- Math.random — Возвращает случайное число от 0 до 1.
- crypto.randomUUID — Создаёт случайный уникальный идентификатор (UUID).
- String.prototype.slice — Возвращает часть строки.