CodeKitHub
Generator Tools

Random Letter Generator

Last updated:

Picking letters "at random" by hand — closing your eyes and pointing at the alphabet, or asking a friend to blurt one out — is famously bad at being unbiased; people gravitate toward certain letters far more than chance would predict. This tool generates however many random letters you need, in uppercase, lowercase, or mixed case, with an option to disallow repeats, using the same cryptographically secure random number source (crypto.getRandomValues()) as this site's Password Generator — not the weaker Math.random() many similar tools quietly use.

Results

What Is This Tool?

A random letter generator picks one or more letters from the 26-letter English alphabet such that every letter has an equal, unbiased chance of being selected each time. The quality of that randomness depends entirely on what random number source is behind it: a naive implementation using JavaScript's `Math.random()` is a pseudorandom generator not designed to resist prediction, while `crypto.getRandomValues()` — defined in the W3C Web Cryptography API — is backed by your operating system's cryptographically secure random source.

This tool uses `crypto.getRandomValues()` for every letter it generates, the same approach used by this site's [Password Generator](/password-generator/) — see our [comparison testing which popular tools actually use a secure random source](/blog/online-password-generators-math-random-vs-crypto/) for why that distinction is worth caring about even for something as simple as picking a letter.

The "no repeats" option performs a Fisher–Yates-style shuffle of the available letter pool and draws from it without replacement, guaranteeing every letter in the result is distinct — useful for anything where a repeated letter would be a problem, like assigning unique single-letter codes.

Why Use It?

  • Pick letters for classroom activities, games (like a random-letter icebreaker or word game), or raffles fairly.
  • Generate unique single-letter identifiers or codes without accidentally repeating one.
  • Get a genuinely unbiased random letter instead of relying on a person's unconscious letter preferences.
  • Choose uppercase, lowercase, or mixed case depending on what your use case needs.
  • 100% local and cryptographically random: everything runs in your browser using crypto.getRandomValues(), and nothing is sent to a server.

How to Use

  1. Set how many letters you want (1 to 100).
  2. Choose the case: uppercase, lowercase, or mixed.
  3. Turn on "No repeats" if you need every letter in the result to be different from the others.
  4. Click "Generate" to produce the result, then click "Copy" to copy the letters to your clipboard.

Example

Input

Count: 5, Case: Uppercase, No repeats: on

Output

Q, F, B, X, M

Each run produces a different random result — this is simply one example output with the "no repeats" option enabled, so all five letters are guaranteed distinct.

Math.random() vs. crypto.getRandomValues() for letter picking

For a casual game, the difference is invisible. For anything where predictability would actually matter, it isn't.

PropertyMath.random()crypto.getRandomValues()
Design goalSpeed and statistical distributionUnpredictability, resistant to prediction
Suitable for security-sensitive useNo — MDN's own docs say so directlyYes — backed by the OS's CSPRNG
Used by this toolNoYes, for every letter generated

Related tools

For other random generators, try these tools.

Random Number Generator · Password Generator · Fantasy Name Generator

Frequently Asked Questions

Is this actually random, or just Math.random()?

It uses crypto.getRandomValues(), the Web Cryptography API's cryptographically secure random number source backed by your operating system — not the weaker Math.random() pseudorandom generator that many similar tools use without saying so. See our tested comparison of which popular generator tools actually use a secure random source for more on why this matters.

What does "no repeats" do?

With it enabled, the tool draws letters without replacement from the available pool (26 letters for a single case, 52 for mixed case), so every letter in the result is guaranteed to be different from every other letter in that same result. Without it, each letter is picked independently and repeats are possible, exactly like rolling a die multiple times.

What's the maximum number of unique letters I can generate?

26 for uppercase-only or lowercase-only mode, or 52 for mixed case (since uppercase and lowercase versions of the same letter count as different results). If you request more than that with "no repeats" on, the count is capped at the pool size.

Can I generate mixed-case letters where the same letter appears as both upper and lower?

Yes — in mixed-case mode with "no repeats" off, nothing prevents both "A" and "a" from appearing in the same result, since they're generated independently. With "no repeats" on and mixed case selected, they're treated as two separate pool entries, so both could still appear, just not more than once each.

Is my usage of this tool tracked or sent anywhere?

No. All random generation happens entirely client-side in your browser using the Web Cryptography API. Nothing is uploaded or logged.

Related Tools