Random passwords with a charset you pick
Each password is built character by character from a pool you assemble. Lowercase adds a-z, Uppercase adds A-Z, Numbers adds 0-9, and Symbols adds !@#$%^&*()-_=+. Anything you type into the Custom field is appended to the pool, so you can include slashes, dots, or any character your password policy requires.
The Length input controls how long each password is, from 4 up to 128 characters. The Count input controls how many passwords you get back, one per line, up to 100. If every toggle is off and the custom field is empty, the generator falls back to lowercase plus digits so you never get an empty pool.
Randomness comes from Math.random() in your browser, which is fine for everyday passwords but is not cryptographically strong. For high-stakes secrets (signing keys, encryption material) use a system tool that draws from a CSPRNG. For login passwords, store the result in a password manager rather than reusing it across sites.
How to use password generator
- 1Open the tool. The input panel can be left empty.
- 2Set Length (4-128) and Count (1-100) in the option panel.
- 3Toggle Lowercase, Uppercase, Numbers, Symbols, or fill Custom to shape the character pool.
- 4Turn on No ambiguous to drop look-alikes (
0 O o l 1 I |) and Min one of each to guarantee at least one character from every enabled class. - 5The output panel shows your passwords, one per line.
- 6Click Copy to grab them all, or paste line by line into a password manager.
Keyboard shortcuts
Drive TextResult without touching the mouse.
| Shortcut | Action |
|---|---|
| Ctrl F | Open the find & replace panel inside the input Plus |
| Ctrl Z | Undo the last input change |
| Ctrl Shift Z | Redo |
| Ctrl Shift Enter | Toggle fullscreen focus on the editor Plus |
| Esc | Close find & replace, or exit fullscreen |
| Ctrl K | Open the command palette to jump to any tool Plus |
| Ctrl S | Save current workflow draft Plus |
| Ctrl P | Run a saved workflow Plus |
What this tool actually does
Charset is fully under your control
The four toggles each contribute a fixed group: Lowercase adds abcdefghijklmnopqrstuvwxyz, Uppercase adds ABCDEFGHIJKLMNOPQRSTUVWXYZ, Numbers adds 0123456789, Symbols adds !@#$%^&*()-_=+. Whatever you type in Custom is appended verbatim, including spaces if you want them.
No-ambiguous-characters mode
Turn on No ambiguous to drop the look-alikes that are easy to misread on a bad font: 0 / O / o, l / 1 / I, and the pipe |. Useful when the password will be transcribed verbally or copied off a screenshot.
Min one of each enabled class
Turn on Min one of each to guarantee that every enabled class (Lowercase, Uppercase, Numbers, Symbols) is represented at least once in the output. The generator seeds one character from each class, fills the rest from the combined pool, then shuffles. Required by many corporate password policies.
Length and bulk count
Set Length from 4 to 128 characters per password. Set Count from 1 to 100 to get a batch in one click, one password per line. Useful for seeding a fleet of test accounts.
Empty-pool fallback
If you switch every toggle off and leave Custom empty, the generator silently falls back to lowercase plus digits so you never end up with a blank result. Re-enable a toggle or fill Custom to take back control.
Browser-only randomness (Math.random)
Each character is selected via Math.random(), which is the JavaScript engine's general-purpose pseudo-random source. That is suitable for routine login passwords; it is not a cryptographic source. Treat the output as low-stakes random text and store anything you keep in a password manager.
No upload, no log, no server
The whole generator runs in JavaScript on your machine. The output panel is the only place the passwords ever appear. Nothing is sent to our servers.
Worked example
Three passwords at length 20 with all four classes on, drawn from the combined pool of letters, digits, and the default symbol set. Each line is one password.
Length: 20 Count: 3 Lowercase, Uppercase, Numbers, Symbols: on No ambiguous: off Min one of each: off
Kp7$mB2-vQx9rT4!nLgZ h8#Rj4yF2pXq6vW3-bC9 Yz!5tQ7nMx2-Rk8bV4hL
Settings reference
| Option | Effect on output |
|---|---|
| Length | Characters per password. Default 20, minimum 4, maximum 128. |
| Count | How many passwords to emit. Default 1, maximum 100. One per line. |
| Lowercase | Adds a-z (26 chars) to the pool. On by default. |
| Uppercase | Adds A-Z (26 chars) to the pool. On by default. |
| Numbers | Adds 0-9 (10 chars) to the pool. On by default. |
| Symbols | Adds !@#$%^&*()-_=+ (14 chars). On by default. |
| No ambiguous | Drops 0, O, o, l, 1, I, and | from the pool. Off by default. |
| Min one of each | Forces at least one character from every enabled class to appear. Off by default. |
| Custom | Free-text field. Every character you type is appended to the pool. Leave blank to use the toggles alone. |
| Empty-pool fallback | If every toggle is off and Custom is empty, the pool falls back to lowercase plus digits. This is fixed. |
| Random source | Math.random(). Suitable for everyday passwords; not cryptographic. |
FAQ
Are these passwords cryptographically secure?
Math.random(), which is a general-purpose pseudo-random source in your browser. It is fine for routine login passwords. For high-stakes secrets, generate them with a system CSPRNG (for example openssl rand -base64 32).