Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как исправить ф-ию? генератор паролей. (https://javascript.ru/forum/events/25712-kak-ispravit-f-iyu-generator-parolejj.html)

boJlb 13.02.2012 14:46

как исправить ф-ию? генератор паролей.
 
Есть функция генератора паролей следующего вида:
<HEAD >
 
<SCRIPT LANGUAGE="JavaScript">
 
function a1(q) {
  var i=document.myform.passlength.value;
  document.myform.password.value="";
  if (i==8)  document.myform.password.size=8; 
  if (i==10) document.myform.password.size=10;
  if (i==12) document.myform.password.size=12;
}
function getRandomNum(lbound, ubound) {
                return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}
 
function getRandomChar() {
var upperChars = "0123456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ";
var charSet = "";
charSet += upperChars;
return charSet.charAt(getRandomNum(0, charSet.length));
}
 
function getPassword(length) {
var rc = "";
if (length > 0)
for (var idx = 0; idx < length; ++idx) {
                rc = rc + getRandomChar();
                }
return rc;
}
</script>
 
</HEAD>


проблема заключается в том, что он периодически выдает комбинацию без цифр. Подскажите плз, как переделать так, чтобы цифра там была всегда? т.е., например, 4-ый, 5-ый символы пароля - обязательно цифры? Заранее спс за help

Skipp 13.02.2012 15:25

Решил по другому сделать, долго не думал и вышло это:
<script type="text/javascript">
	function gen(n){
		var arg = new Array();
		for(var i=0; i<n;i++) arg.push(rand(48,58), rand(65,91), rand(97,123))
		for(var j, x, y = arg.length; y; j = parseInt(Math.random() * y), x = arg[--y], arg[y] = arg[j], arg[j] = x);
		return String.fromCharCode.apply(this, arg);
	}
	function rand(min, max){
		return Math.floor(Math.random() * (max - min) + min);
	}
</script>
<input id="pass" type="text" />
<input type="button" value="Генерировать" onclick="document.getElementById('pass').value = gen(4)" />


Всегда состоит из четырёх цифр, а так же четырёх маленьких и четырёх больших символов.

boJlb 13.02.2012 15:52

Цитата:

Сообщение от Skipp (Сообщение 157176)
Всегда состоит из четырёх цифр, а так же четырёх маленьких и четырёх больших символов.

Генератор используется для получения паролей заданной длины, а именно 8, 10 и 12 символов. вашь подходит только для последнего варианта)
а как же мне быть с 8-и символьным паролем?
Можно не менять фунцию полностью, а задать, например, параметр, который будет отвечать за генерацию именно 4-ого символа паса?

Skipp 13.02.2012 16:03

Последовательность моего скрипта n*3, вам такой не подойдёт?

Skipp 13.02.2012 16:29

<script type="text/javascript">
	function gen(n){
		var arg = new Array();
		for(var i=0; i<n;i++) arg.push(rand(48,58), rand(65,91), rand(97,123))
		for(var j, x, y = arg.length; y; j = parseInt(Math.random() * y), x = arg[--y], arg[y] = arg[j], arg[j] = x);
		return String.fromCharCode.apply(this, arg);
	}
	function rand(min, max){
		return Math.floor(Math.random() * (max - min) + min);
	}
</script>
<input id="pass" type="text" />
<input type="button" value="Генерировать 12" onclick="document.getElementById('pass').value = gen(4)" />
<input type="button" value="Генерировать 10" onclick="document.getElementById('pass').value = gen(4).substr(1, 10)" />
<input type="button" value="Генерировать 8" onclick="document.getElementById('pass').value = gen(3).substr(1, 8)" />

Skipp 13.02.2012 16:55

Сделал чуток по проще, в функцию просто передаётся необходимая длина.
<script type="text/javascript">
function gen(l){
		var arg = new Array(), l = l || 4;
		for(var i = 0; i < Math.round((l / 3) + 0.49); i++) arg.push(rand(48,58), rand(65,91), rand(97,123))
		for(var j, x, i = arg.length; i; j = parseInt(Math.random() * i), x = arg[--i], arg[i] = arg[j], arg[j] = x);
		return String.fromCharCode.apply(this, arg).substr(0, l);
	}
	function rand(min, max){
		return Math.floor(Math.random() * (max - min) + min);
	}
</script>
<input id="pass" type="text" />
<input type="button" value="Генерировать 12" onclick="document.getElementById('pass').value = gen(12)" />

boJlb 13.02.2012 17:20

Вложений: 1
Skipp, глянь как это все выглядит в конечном варианте, архив я приложил..
В JS я есмь дерево еще то) все сделал по аналогии с готовых скриптов, поэтому если ты внедришь свое творение в мой чудо-генератор - счастью и благодарности моим не будет предела!:)

Skipp 13.02.2012 17:26

Прости, но это уж делай сам.

boJlb 13.02.2012 17:28

Skipp,
ок, спс за help


Часовой пояс GMT +3, время: 12:32.