| Я часто использую генераторы паролей и мне надоело, что даже если укажешь спецсимволы, то не факт что они будут. Они могут быть, но нет проверки, на их наличие в сгенерированном пароле. Написала свой генератор паролей |
использую также jquery-3.4.1.min.js
html блок
<div> <label> <input type="checkbox" name="numbers" id="numbers" checked="checked"> Цифры </label><br> <label> <input type="checkbox" name="upper" id="upper" checked="checked"> Прописные (заглавные) буквы </label><br> <label> <input type="checkbox" name="lower" id="lower" checked="checked"> Строчные (маленькие) буквы </label><br> <label> <input type="checkbox" name="symbols" id="symbols"> Специальные символы ~!@-#$ </label> <br> <label> Длина пароля (1-100 символов): <input type="number" name="length" id="length" value="6" min="1" max="100"> </label> <br> <div class="mt-4"><button id="generatePassword" class="btn btn-primary">cоздать пароль</button></div> </div> <div><ul id="result" class="d-none"></ul></div> <div id="error" class="text-danger"></div> |
function generatePassword(length,numbers,upper,lower,symbols){
let charset = "";
if(numbers){
charset += "0123456789";
}
if(upper){
charset += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
if(lower){
charset += "abcdefghijklmnopqrstuvwxyz";
}
if(symbols){
charset += "~!@-#$";
}
if(charset.length > 0){
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;
}
}
else{
return false;
}
}
function checkResult(input,length,numbers,upper,lower,symbols){
let charset,find;
let result = true;
if(length > 3){
if(numbers){
charset = "0123456789";
find = false;
for (var i = 0; i < charset.length; i++){
if(input.includes(charset[i])){
find = true;
}
}
result = find;
}
if(result && upper){
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
find = false;
for (var i = 0; i < charset.length; i++){
if(input.includes(charset[i])){
find = true;
}
}
result = find;
}
if(result &&lower){
charset = "abcdefghijklmnopqrstuvwxyz";
find = false;
for (var i = 0; i < charset.length; i++){
if(input.includes(charset[i])){
find = true;
}
}
result = find;
}
if(result && symbols){
charset = "~!@-#$";
find = false;
for (var i = 0; i < charset.length; i++){
if(input.includes(charset[i])){
find = true;
}
}
result = find;
}
}
return result;
}
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
$(document).ready(function(){
console.log('test');
$('#generatePassword').on('click',function(){
$('#error').html("");
$('#result').html("");
let length,numbers,upper,lower,symbols,result;
length = "";
strLength = String($('#length').val());
for (var i = 0; i < strLength.length; i++){
let s = strLength[i];
if(inArray(s,[0,1,2,3,4,5,6,7,8,9])){
length += s;
}
}
length = Number(length);
if(length < 1){
length = 1;
$('#length').val(1);
}
if(length > 100){
length = 100;
}
$('#length').val(length);
numbers = $('#numbers').prop('checked');
upper = $('#upper').prop('checked');
lower = $('#lower').prop('checked');
symbols = $('#symbols').prop('checked');
if(!numbers && !upper && !lower && !symbols){
$('#error').html("Укажите хотя бы 1 параметр");
}
else{
let check;
for (let i = 0; i < 9; i++) {
check = false;
while(!check){
result = generatePassword(length,numbers,upper,lower,symbols);
check = checkResult(result,length,numbers,upper,lower,symbols);
}
$('#result').append("<li>"+result+"</li>");
}
}
});
}); |