JSFiddle - React, Tailwind, and code Playground
JavaScript
function generatePassword( length ) {
var letters = 'abcdefghjknpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ',
special = '{}()#%&',
characters = [],
amountOfLetters = Math.floor( Math.random() * ( length - 2 ) ) + 1,
amountOfNumbers = Math.floor( Math.random() * ( length - 1 - amountOfLetters ) ) + 1,
amountOfSpecial = length - ( amountOfLetters + amountOfNumbers );
for (var i = 0, n = letters.length; i < amountOfLetters; ++i) {
characters.push( letters.charAt( Math.floor( Math.random() * n ) ) );
}
for ( i = 0; i < amountOfNumbers; ++i) {
characters.push( ''+( Math.floor( Math.random() * 9 ) + 1 ) );
}
for ( i = 0, n = special.length; i < amountOfSpecial; ++i) {
characters.push( special.charAt( Math.floor( Math.random() * n ) ) );
}
return characters.sort( function( a, b ) {
return Math.random() - 0.5;
} ).join( '' );
}
console.log( generatePassword( 10 ) );