Как сгенерировать пароль на JS
Небольшая JavaScript функция для генерации пароля:
function generatePassword(){ var length = 8, charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; res = ''; for (var i = 0, n = charset.length; i < length; ++i) { res += charset.charAt(Math.floor(Math.random() * n)); } return res;}
Но есть один момент – в её основе лежит метод Math.random(), который не предоставляет криптографически стойкие случайные числа.
Вместо Math.random() лучше использовать Web Crypto API и более точный метод crypto.getRandomValues().
Поддержка в браузерах
Как видно в старых браузерах нет поддержки Web Cryptography, поэтому для них всё-таки придется использовать Math.random().
function generatePassword(){ var length = 8, charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$"; if(window.crypto && window.crypto.getRandomValues) { return Array(length) .fill(charset) .map(x => x[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * (x.length + 1))]) .join(''); } else { res = ''; for (var i = 0, n = charset.length; i < length; ++i) { res += charset.charAt(Math.floor(Math.random() * n)); } return res; }}
Пример использования
<form class="form-inline" style="width: 380px;margin: 10px auto;"> <div class="form-group mx-sm-3"> <input type="text" class="form-control" id="input-password"> </div> <button type="button" id="input-generate" class="btn btn-primary">Сгенерировать</button></form> <script src="/jquery.min.js"></script> <script>$("#input-generate").click(function(){ $("#input-password").val(generatePassword()); return false;}); function generatePassword(){ var length = 8, charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$"; if(window.crypto && window.crypto.getRandomValues) { return Array(length) .fill(charset) .map(x => x[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * (x.length + 1))]) .join(''); } else { res = ''; for (var i = 0, n = charset.length; i < length; ++i) { res += charset.charAt(Math.floor(Math.random() * n)); } return res; }}</script>