A bevezetőben említett feltételek megadásához létrehoztunk néhány property-t a PasswordClass nevű osztályhoz. Ezek értékeit a Form-ra helyezett TextBox kontrolokban adjuk meg. A property-k sorban a következők:
- Passport: tartalmazza a generált jelszót, így csak olvasható.
- AllowUpperCase: logikai értéke tartalmazza, hogy megengedett-e a nagybetűk előfordulása a jelszóban, vagy sem.
- MinimumSize: megadhatjuk, hogy mekkora legyen a jelszó minimális hossza.
- MaximumSize: megadhatjuk, hogy mekkora legyen a jelszó maximális hossza.
- MaximumDigits: megadhatjuk, hogy mekkora legyen a jelszóban megengedett numerikus karakterszám.
A jelszó tárolásához létre kellett hoznunk egy StringBuilder objektumot:
private StringBuilder pwdBuffer;
...
public PasswordClass()
{
pwdBuffer = new StringBuilder();
}
Létrehoztunk egy enumerátort a megengedett karakterek ASCII kódjainak tárolásához. Az azonos csoportba tartozó elemek a kódtáblában egymást követő kódokkal rendelkeznek, csak az egyes csoportok találhatók elszórtan a táblában. Ennek feloldására a felsorolt típus elemei páronként tartalmazzák az egyes csoportok legelső, és legutolsó elemeinek kódjait:
public enum Ranges
{
DigitsRangeDown = 48, DigitsRangeUp = 57,
UppercaseRangeDown = 65, UppercaseRangeUp = 90,
LowercaseRangeDown = 97, LowercaseRangeUp = 122
}
A Password property lekérdezéséhez egy Generate nevű saját metódus tartozik, melyben képezzük az adott feltételekkel rendelkező jelszót. A metódus visszatérési értéke a generált jelszó.
public string Password
{
get
{
return Generate();
}
}
A Generate metódus felépítése a következő:
protected virtual string Generate()
{
rand = new Random();
int res = 0;
pwdBuffer.Capacity = this.MaximumSize * 2;
A metódusban először a maximális hossz kétszerese terjedelemben szúrunk be karaktereket a jelszó karakterláncba, attól függően, hogy a véletlenszám-generátor milyen értéket ad vissza 0 és 3 között:
while ( length < max )
{
...
genChar = this.rand.Next(0, 3);
...
switch (genChar)
{
case 0: GenerateCharacter(Ranges.LowercaseRangeDown, Ranges.LowercaseRangeUp);
...
}
}
A generált értéktől függően más és más paraméter párral hívjuk meg a GenerateCharacter metódusunkat, mely a karakterlánc végéhez fűz egy újabb karaktert. A paraméterek a felsorolt típus elem-párjai, melynek eredményeképpen a megadott határok közti kódtartományba eső karakterekből fűz fel egyet a metódus a lánc végére.
A Generate metódusban meghívjuk a ControlPassword függvényünket is, mely egy végső ellenőrzést végez a jelszó karakterláncon, majd visszaadjuk a jelszót:
ControlPassword();
return pwdBuffer.ToString().Trim();
}
A ControlPassword metódusban végezzük el többek közt azt a műveletet, melynek eredményeképpen a jelszó csak a megengedett számú számjegyet tartalmazza.
A felhasználói felületen meg kell adni a minimális hosszt, mely nem lehet kisebb, mint 6. Meg kell adni a maximális hosszt, mely nem lehet nagyobb, mint 15. A jelölőnégyzetben pedig meg kell adni, hogy szeretnénk-e nagybetűket a karakterláncban.
Amennyiben meghatározott karakterszámú jelszót szeretnénk, egyszerűen adjunk meg azonos számokat minimális és maximális karakterszámként, a meghatározott határokon belül.