# Generate a random string with given length

Return a lowercase Base32 identifier from a cryptographic generator.

Canonical: https://1loc.dev/random/generate-a-random-string-with-given-length/
Version: 1.0.0
Runtime: JavaScript · Node.js 22 / modern browsers
Verification: Usage lines executed in Node.js 22 and headless Chromium; no external services
Updated: 2026-10-28

## Implementation

```javascript
function randomId(length) {
  const alphabet = '0123456789abcdefghjkmnpqrstvwxyz';
  return Array.from(crypto.getRandomValues(new Uint8Array(length)), byte => alphabet[byte % 32]).join('');
}
```

## Usage

```javascript
const id = randomId(12);
id.length; // → 12
/^[0-9a-hjkmnp-tv-z]+$/.test(id); // → true
randomId(12); // e.g. 'k3x9m2q7v0ad'
```

Lines marked → were executed in Node.js 22 and in headless Chromium, and each result was compared with the value shown. Lines marked e.g. are illustrative.

## Limits

- 32 symbols (Crockford’s Base32, lowercase) divide 256 evenly, so every symbol is equally likely without rejection sampling. It omits i, l, o and u, which are easy to misread.
- The original took one base-36 digit from Math.random().toString(36): predictable, and empty for some values such as 0.
- Each character carries 5 bits: 26 characters give 130 bits.

The function does not validate its arguments. Add checks where it receives untrusted input.

## Source and license

Original: https://github.com/phuocng/1loc/blob/14b481cf60dff1620ab1bb99a43b1f68068cdd9b/contents/generate-a-random-string-with-given-length.mdx
Source file (this edition): https://github.com/akamind/1loc/blob/0a77f131b22d2ba3b7ec1728846f900c22821678/contents/generate-a-random-string-with-given-length.mdx
Author: Nguyen Huu Phuoc and original contributors
Contributors: See original repository history
Source commit: 14b481cf60dff1620ab1bb99a43b1f68068cdd9b
Copyright (c) 2020 phuoc-ng
License: MIT — https://1loc.dev/licenses/
Maintainer: Oveyon
Modifications: Uses crypto.getRandomValues and an unbiased 32-symbol alphabet; the original used Math.random and could return empty characters. Documented as a reference with executed usage lines. Original MDX retained as inert source evidence.
