webForumDet fria alternativet

lösenords generator

JavaScript

23 svar · 741 visningar · startad av ptr_lks

Medlem sedan juni 2005584 inlägg
Frågan#1

Hej wf,
nu har jag efter mycket googlande och sökande här på wf, försökt konstruera en password generator...

  1. ange antalet siffror den skall innehålla
  2. ange total antalet tecken
  3. tryck på knapp => slumpa fram lösenordet.

Bifoga koden för att spara utrymme.

Problemet är bara att jag får ett fel:

Ett objekt förväntas
kod 0
rad 40

rad 40

<input name="skapa" type="button" value="Slumpa  fram l&ouml;senordet" onClick="gelosenord(this.form)" /><br />

Tack för ordet
/ptr

Medlem sedan mars 20025 907 inlägg
#2

Du glömde nog bifogda koden trots allt :p

Medlem sedan juni 2005584 inlägg
#3

Peeer skrev:

Du glömde nog bifogda koden trots allt :p

gör ett nytt försök :e

Medlem sedan juni 200032 967 inlägg
#4

Ett av felen skulle ju kunna vara att du har fasansfullt många mellanslag här:

   var fasv = form. antalsiffra. value;

Dessutom tar du emot form1 i funktionen, men använder form. Lite enkel korrekturläsning borde fånga dessa fel.

mvh

Medlem sedan dec. 20025 483 inlägg
#5

Anders: antalet mellanslag har ingen betydelse. Däremot "form" som du nämner och

slumpat[i++] = sifra.charAt(Math.floor(Math.random()*10)); // sifra?
while (i <( fav – fasv)) { // talstreck istället för '-'

Samt ett avslutande '}' efter ovanstående while-sats.

B.t.w. ptr_lks: hur gick det med tråden
http://www.webforum.nu/showthread.php?t=135000

Medlem sedan juni 200032 967 inlägg
#6

Anders: antalet mellanslag har ingen betydelse.

Jaså, är det ok att ha mellanslag efter punkterna? Cool, då fick jag lära mig något nytt. :bire

Medlem sedan dec. 20025 483 inlägg
#7

@nders skrev:

Anders: antalet mellanslag har ingen betydelse.

Jaså, är det ok att ha mellanslag efter punkterna? Cool, då fick jag lära mig något nytt. :bire

Jo. Frågan är hur ofta man behöver använda det. I ovanstående fall verkar det kanske aningens onödigt, men i t.ex.:

str = str.replace(...).
            replace(...).
            replace(...);

blir det mer lättläst, även om jag föredrar:

str = str.replace(...)
            .replace(...)
            .replace(...);

:)

Medlem sedan juni 200032 967 inlägg
#8

Tack för lektionen! :)

Medlem sedan juni 2005584 inlägg
#9

Peter S skrev:

Anders: antalet mellanslag har ingen betydelse. Däremot "form" som du nämner och

slumpat[i++] = sifra.charAt(Math.floor(Math.random()*10)); // sifra?
while (i <( fav – fasv)) { // talstreck istället för '-'

Samt ett avslutande '}' efter ovanstående while-sats.

Det funkar nättre, men inte bra...
blir konstiga resultat: om jag fyller i att jag vill ha 8 tecken som allt

  • och 2 siffror => 1 sifra och 5 bokstäver dvs totalt 6 tecken
  • lämnar jag rutan blank så får jag 8 bokstäver
  • fyller i 0 => 8 bokstäver
  • fylleri 1 => 7 tecken, 6 bokstäver och 1 siffra
  • fyller i 5 => 3 siffror och 2 bokstäver, dvs 5 tecken och inte 8 som jag vill ha
  • fyller i 6 => 4 siffror + 2 bokstäver = 6 trcken och inte 8
  • fyller i 7 => ger 7 siffror dvs 7 teckenoch inte 8

Hoppas ni förstår felet
Tack för ordet
/ptr

Medlem sedan dec. 20025 483 inlägg
#10

Vad är syftet med den första if-satsen?

function gelosenord(form) {
    var siffra = '0123456789';
    var bokstav = 'abcdefghijklmnopqrstuvwxyz';
    var tecken = '';
    var slumpat = []; //kommer innehålla det slumpade tecknen. [] = newArray()
    var i = 0;
   var fasv = form.antalsiffra.value; // hur många siffror lösenordet skall innehålla
   var fav= form.antal.value; //hur många tecken lösenordet skall innehålla
  var b = bokstav.length;
  var s = siffra.length;
  var index = 0;

/*if (fasv > 0) {
  slumpat[i++] = siffra.charAt(Math.floor(Math.random()*10));
  tecken += siffra;
} 
*/
while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}
i=0;
while (i++ < fasv) {
  slumpat[index++] = siffra.charAt(Math.floor(Math.random()*s));
}

 form.losenord.value = slumpat.join('');
}
Medlem sedan juni 2005584 inlägg
#11

Peter S skrev:

Vad är syftet med if-satsen?

/*if (fasv > 0) {
  slumpat[i++] = siffra.charAt(Math.floor(Math.random()*10));
  tecken += siffra;
} 
*/

syftet är att om vi skall ha siffror så skall siffror slumpas fram

Medlem sedan dec. 20025 483 inlägg
#12

Det sköter väl den andra while-satsen?

Vad används 'tecken' till?

Medlem sedan aug. 20039 340 inlägg
#13

Jag satte mig för att försöka fixa detta, och det blev nästan så att jag skrev om det helt och hållet. Håll till godo, och behåll gärna copyright-notisen. Koden nedan funkar iaf utmärkt.

<script type="text/javascript">
// Partly copyright 2006 nitro2k01
String.prototype.getRandomCharFromString=function(){
	return this.charAt(parseInt(this.length*Math.random()));
}

function gelosenord(form) {
	var siffra = '0123456789';
	var bokstav = 'abcdefghijklmnopqrstuvwxyz';
	var slumpat = ""; //kommer innehålla det slumpade tecknen.
	var i = 0;
	var fasv = parseInt(form.antalsiffra.value); // hur många siffror lösenordet skall innehålla

	if (!form.antalsiffra.value.length)
		fasv=0;

	var fav= form.antal.value; //hur många tecken lösenordet skall innehålla

	if (isNaN(fav) || fav<1){
		alert("Inte ett nummer, ett negativt nummer eller noll angivet i antalet tecken.");
		return;
	}

	if (isNaN(fasv) || fasv<0){
		alert("Inte ett nummer eller negativt nummer angivet i antalet siffror.");
		return;
	}

	while(fav--){
		if (Math.random()<fasv/fav){// Distribute numbers evenly
			slumpat += siffra.getRandomCharFromString();
			--fasv;
		}else
			slumpat += bokstav.getRandomCharFromString();
	}

	form.losenord.value = slumpat;

}
</script>
Medlem sedan juni 2005584 inlägg
#14

Peter S skrev:

Det sköter väl den andra while-satsen?

Om du menar

while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}

så sköter detta (iaf enlig mina intentioner) "resterande" tecken utgörs av bokstäver

Peter S skrev:

Vad används 'tecken' till?

där är meningen att bokstäver och/eller siffror skall samlas, innan vi slumpar

Medlem sedan juni 2005584 inlägg
#15

nitro2k01 skrev:

Jag satte mig för att försöka fixa detta, och det blev nästan så att jag skrev om det helt och hållet. Håll till godo, och behåll gärna copyright-notisen. Koden nedan funkar iaf utmärkt.

du är snäll du, men jag vill gärna försöka få mitt att funka, tror att jag lär mig bäst på det sätt.
Hoppas att du inte tycker att jag är otacksam
/ptr

Medlem sedan dec. 20025 483 inlägg
#16

Så här tolkar jag koden:

// lägg till bokstäverna
while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}

// lägg till siffrorna
i = 0;
while (i++ < fasv) {
  slumpat[index++] = siffra.charAt(Math.floor(Math.random()*s));
}

Sedan har du den färdiga strängen i slumpat.join('') (t.ex. "abcde012").

Vill du sedan kasta om dem kan du använda:

var rslt = "";
for (var k = 0; k < fav; ++k){
  rslt += slumpat.splice(Math.floor(Math.random() * slumpat.length), 1);
}

...och skriva 'rslt' till lösenordsfältet.

En annan lösning är ju att använda nitro's kod :)

Medlem sedan aug. 20039 340 inlägg
#17

ptr_lks skrev:

du är snäll du, men jag vill gärna försöka få mitt att funka, tror att jag lär mig bäst på det sätt.
Hoppas att du inte tycker att jag är otacksam
/ptr

Ok! Men kolla gärna på den och försök förstå. Du kommer nog lära dig en del på det också.

Medlem sedan juni 2005584 inlägg
#18

Peter S skrev:

Så här tolkar jag koden:

// lägg till bokstäverna
while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}

// lägg till siffrorna
i = 0;
while (i++ < fasv) {
  slumpat[index++] = siffra.charAt(Math.floor(Math.random()*s));
}

Sedan har du den färdiga strängen i slumpat.join('') (t.ex. "abcde012").

Peter, vet inte om jag förstod dig rätt. Är det så här du menar?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Slump</title>
</head>
<script type="text/javascript">
function gelosenord(form) {
    var siffra = '0123456789';
    var bokstav = 'abcdefghijklmnopqrstuvwxyz';
    var tecken = '';
    var slumpat = []; //kommer innehålla det slumpade tecknen. [] = newArray()
    var i = 0;
   var fasv = form.antalsiffra.value; // hur många siffror lösenordet skall innehålla
   var fav= form.antal.value; //hur många tecken lösenordet skall innehålla
  var b = bokstav.length;
  var s = siffra.length;
//lägg till bokstäver
while (i <( fav - fasv)) {
slumpat[i++] = bokstav.charAt(Math.floor(Math.random()*b));
}
//lägg till siffror
while (i < fasv) {
slumpat[i++] = siffra.charAt(Math.floor(Math.random()*s));
}
form.losenord.value = slumpat.join('');

}
</script>
<body>
<h2>Slumpa fram ett lösenord </h2><br />
<br />
<form  name="form">
Hur många tecken skall lösenordet innehålla: <input name="antal" type="text" size="5" /><br /> <br />

Hur många siffror skall lösenordet innehålla: <input name="antalsiffra" type="text" size="5" /><br /><br />
<input name="skapa" type="button" value="Slumpa  fram l&ouml;senordet" onClick="gelosenord(this.form)" /><br />
<br />
<input name="losenord" type="text" size="13" />

</form>
</body>
</html>

i så fall funkar inte

Medlem sedan dec. 20025 483 inlägg
#19

Nej, så här:

function gelosenord(form) {
    var siffra = '0123456789';
    var bokstav = 'abcdefghijklmnopqrstuvwxyz';
    var tecken = '';
    var slumpat = []; //kommer innehålla det slumpade tecknen. [] = newArray()
    var i = 0;
   var fasv = form.antalsiffra.value; // hur många siffror lösenordet skall innehålla
   var fav= form.antal.value; //hur många tecken lösenordet skall innehålla
  var b = bokstav.length;
  var s = siffra.length;
  var index = 0;

// kontrollera inputen
// - är fav negativ?
// - är fasv negativ?
// - är fasv > fav?

// lägg till bokstäver
while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}

// lägg till siffror
i=0;
while (i++ < fasv) {
  slumpat[index++] = siffra.charAt(Math.floor(Math.random()*s));
}

form.losenord.value = slumpat.join('');

}

Notera gärna kommentarerna i början på funktionen.

Medlem sedan juni 2005584 inlägg
#20

Peter S skrev:

// kontrollera inputen
// - är fav negativ?
// - är fasv negativ?
// - är fasv > fav?

Notera gärna kommentarerna i början på funktionen.

fav är positv
fasv är positiv
fasv är alltid större än eller = fav

Men får det fortfande inte att funka

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Slump</title>
</head>
<script type="text/javascript">
 var siffra = '0123456789';
    var bokstav = 'abcdefghijklmnopqrstuvwxyz';
    var tecken = '';
    var slumpat = []; //kommer innehålla det slumpade tecknen. [] = newArray()
    var i = 0;
   var fasv = form.antalsiffra.value; // hur många siffror lösenordet skall innehålla
   var fav= form.antal.value; //hur många tecken lösenordet skall innehålla
  var b = bokstav.length;
  var s = siffra.length;
  var index = 0;

// kontrollera inputen
// - är fav negativ?
// - är fasv negativ?
// - är fasv > fav?

// lägg till bokstäver
while (i++ <( fav - fasv)) {
  slumpat[index++] = bokstav.charAt(Math.floor(Math.random()*b));
}

// lägg till siffror
i=0;
while (i++ < fasv) {
  slumpat[index++] = siffra.charAt(Math.floor(Math.random()*s));
}

form.losenord.value = slumpat.join('');

}</script>
<body>
<h2>Slumpa fram ett lösenord </h2><br />
<br />
<form  name="form">
Hur många tecken skall lösenordet innehålla: <input name="antal" type="text" size="5" /><br /> <br />

Hur många siffror skall lösenordet innehålla: <input name="antalsiffra" type="text" size="5" /><br /><br />
<input name="skapa" type="button" value="Slumpa  fram l&ouml;senordet" onClick="gelosenord(this.form)" /><br />
<br />
<input name="losenord" type="text" size="13" />

</form>
</body>
</html>

så får jag fel

förväntas ett objekt

Ser att du la till index, varför det?

140 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)