---
title: "lösenords generator"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/141028-lösenords-generator"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "ptr_lks"
published: "2006-01-17T10:12:10.000Z"
updated: "2006-01-27T10:09:43.000Z"
replies: 23
views: 751
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/141028-lösenords-generator"
---

# lösenords generator

_Sida 1 av 2._

## #1 — ptr_lks, 2006-01-17T10:12Z

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

Permalänk: https://www.webforum.nu/p/141028

## #2 — Peeer, 2006-01-17T10:45Z

Du glömde nog bifogda koden trots allt :p

Permalänk: https://www.webforum.nu/p/1747404

## #3 — ptr_lks, 2006-01-17T11:24Z

> **Peeer skrev:**
>
> Du glömde nog bifogda koden trots allt :p

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

Bilagor:

- [generator_kod.txt](https://www.webforum.nu/a/9284.txt)

Permalänk: https://www.webforum.nu/p/1747413

## #4 — @nders, 2006-01-17T11:28Z

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

Permalänk: https://www.webforum.nu/p/1747414

## #5 — Peter S, 2006-01-17T11:36Z

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>

Permalänk: https://www.webforum.nu/p/1747415

## #6 — @nders, 2006-01-17T11:38Z

> 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

Permalänk: https://www.webforum.nu/p/1747416

## #7 — Peter S, 2006-01-17T11:47Z

> **@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(...);
```

 :)

Permalänk: https://www.webforum.nu/p/1747417

## #8 — @nders, 2006-01-17T11:58Z

Tack för lektionen! :)

Permalänk: https://www.webforum.nu/p/1747420

## #9 — ptr_lks, 2006-01-17T12:05Z

> **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

Bilagor:

- [generator_kod2.txt](https://www.webforum.nu/a/9285.txt)

Permalänk: https://www.webforum.nu/p/1747426

## #10 — Peter S, 2006-01-17T12:30Z

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('');
}
```

Permalänk: https://www.webforum.nu/p/1747433

## #11 — ptr_lks, 2006-01-17T12:40Z

> **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

Permalänk: https://www.webforum.nu/p/1747437

## #12 — Peter S, 2006-01-17T12:45Z

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

Vad används 'tecken' till?

Permalänk: https://www.webforum.nu/p/1747440

## #13 — nitro2k01, 2006-01-17T12:49Z

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>
```

Permalänk: https://www.webforum.nu/p/1747441

## #14 — ptr_lks, 2006-01-17T12:53Z

> **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

Permalänk: https://www.webforum.nu/p/1747443

## #15 — ptr_lks, 2006-01-17T12:56Z

> **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

Permalänk: https://www.webforum.nu/p/1747445

## #16 — Peter S, 2006-01-17T12:57Z

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  :)

Permalänk: https://www.webforum.nu/p/1747447

## #17 — nitro2k01, 2006-01-17T12:59Z

> **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å.

Permalänk: https://www.webforum.nu/p/1747448

## #18 — ptr_lks, 2006-01-17T13:06Z

> **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

Permalänk: https://www.webforum.nu/p/1747450

## #19 — Peter S, 2006-01-17T13:10Z

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.

Permalänk: https://www.webforum.nu/p/1747453

## #20 — ptr_lks, 2006-01-17T13:18Z

> **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?

Permalänk: https://www.webforum.nu/p/1747458

---

Tråden på webben: https://www.webforum.nu/amne/javascript/141028-lösenords-generator  
Nästa sida: https://www.webforum.nu/amne/javascript/141028-lösenords-generator/page2.md
