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

Используя Node.js, это может быть намного проще. Вам просто нужно использовать встроенную библиотеку crypto.

const { randomBytes } = require(“node:crypto”);

function randomString(length) {
  if (length % 2 !== 0) {
    length++;
  }
  
  return randomBytes(length / 2).toString("hex");
}

const string = randomString(8);
// string = "df5ec630"

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

В качестве бонуса: если вам просто нужна случайная строка для использования вне приложения, вы можете просто зайти в терминал, ввести node, чтобы войти в REPL, а затем добавить require(‘node:crypto’).randomBytes(8).toString(‘hex’).

node
Welcome to Node.js v20.4.0.
Type ".help" for more information.
> require('node:crypto').randomBytes(8).toString('hex')
'568b6620639fdf54'

Если вы хотите сгенерировать случайную строку, даже не заходя в REPL, вы можете использовать следующее:

node -e “console.log(require(‘node:crypto’).randomBytes(8).toString(‘hex’))”

На Mac вы даже можете добавить | pbcopy к команде, чтобы строка скопировалась прямо в буфер обмена.

node -e “console.log(require(‘node:crypto’).randomBytes(8).toString(‘hex’))” | pbcopy

Просто помните, что при использовании команды из терминала или REPL длина, передаваемая в randomBytes, будет равна половине длины выводимого значения. Поэтому, если вам нужна случайная строка из 8 символов, укажите длину 4.

Надеюсь, этот быстрый совет был полезен. Дайте мне знать в комментариях, видели ли вы какие-либо оптимизации приведенного выше кода или есть ли более простой способ генерации случайных строк.

Спасибо за прочтение!

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