Szerző Téma: [Jelszógenerátor] generateRandomString - Random karakterek generálása  (Megtekintve 1571 alkalommal)

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
+8 Show voters
Hali!
Szükségem volt egy ilyen szkriptre, aztán gondoltam bárkinek jól jöhet.
 
generateRandomString(karakter/* MAX 256 */, bool:kulonleges=false)
{
#define DEBUG 1 // ha  azt akarod hogy a végén ne írja ki konzolba, tedd 0-ra.
#define MAX_KARAKTER 81 // Ennyi karaktert tartalmaz maximum a \'karakterek\' változó
new
karakterek[MAX_KARAKTER char * 4] = EOS, // üres tároló létrehozása
i, // ciklus fõ \"irányítója\" ez lesz
/*
   k[3]: ezekbe tárolom majd a random értékeket, azért van 3, hogy biztosra menjünk, azért vagyok ilyen elõvigyázatos
   mert Pascalban meg kellett hívni a Randomize függvényt a normális használat érdekébem, itt nem tudom hogy mûködik
*/
k[3],
c[256 char], // nem tudom miért, de csak ezzel a segédtárolóval mûködik az strins, majd lennt leírom.
ebbe[256] // ebbe fogom tárolni a legenerált karaktereket
;
if(kulonleges == false)
karakterek = \"qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890\"; // ékezetesek
else
karakterek = \"qwertzuiopõúasdfghjkléáûíyxcvbnmQWERTZUIOPÕÚASDFGHJKLÉÁÛÍYXCVBNMöüóÖÜÓ0123456789\"; //nem ékezetesek
for(i = 0; i < karakter; i++)
{   
k[0] = random(3-1)+1; // kicsit megspékeljük a változatosság kedvéért a random értékeket, majd \'k[1]\' és \'k[2]\' változókból választ
k[1] = random((strlen(karakterek)-1)-0)+0; // kiválaszt egy random értéket a karakterek 0 és a függvényben megadott érték(milyen hosszú legyen) közt
k[2] = random((strlen(karakterek)-1)-0)+0; // dettó
c = karakterek[k[k[0]]]; // na itt, ezt nem tudom miért kell, de így mûködik.. ha simán beírom a \'c\' helyére ezt: \'karakterek[k[k[0]]]\' nem megy :|
strins(ebbe, c, i); // mindig hozzáadok az \'ebbe\' változóba egy karaktert, amit frissen generáltam, az \'i\'-edik helyre
}
#if DEBUG != 0
printf(\"asd: %s\", ebbe);
#endif
return ebbe;
}

 
PASTEBIN
Legenerál egy 8 karakter hosszú random szöveget.
Használat ékezetek nélkül:
 
generateRandomString(8);
generateRandomString(8, false);

 
Visszatérési példa: Ahj47JKf
Használat ékezetekkel:
 
generateRandomString(8, true);

 
Visszatérési példa: üÕfh1gYl

Nem elérhető BoOy

  • 3209
  • 2013-as év szkriptere
    • Profil megtekintése
[Jelszógenerátor] generateRandomString - Random karakterek generálása
« Válasz #1 Dátum: 2014. január 26. - 01:51:16 »
0 Show voters
Szép lett Zharko mint mindig ;)
Pacsi.

Nem elérhető Cappsy

  • Adminisztrátor
  • 2754
    • Profil megtekintése
[Jelszógenerátor] generateRandomString - Random karakterek generálása
« Válasz #2 Dátum: 2014. január 26. - 11:12:56 »
0 Show voters
fajántos :D Grat!

[Jelszógenerátor] generateRandomString - Random karakterek generálása
« Válasz #3 Dátum: 2014. január 26. - 11:22:01 »
0 Show voters
érdekesnek látszik :) lehet felhasználom és átalakítom !!! repül a + :)

[Jelszógenerátor] generateRandomString - Random karakterek generálása
« Válasz #4 Dátum: 2014. január 26. - 19:33:20 »
0 Show voters
Valószínûleg a char változótípus meg a nem char tipusu \"ebbe\" nevû tömböd miatt \"nem mûködik\" egyébként strinset használni itt eléggé pocsékolás véleményem szerint.
Elõszöris felejtsd el itt a char változókat mert felesleges és macerát okoz. Másodszor léteznek null terminátoros és nem null terminátoros stringek. A sa-mp csak a null terminátoros stringeket kezeli ez azt jelenti. Hogy a karakterláncok végét egy string vége \"EOS\" (End Of String) karakter zárja le. ez a \\0 vagy EOS. (alap pawn definíció az EOS). Így pl az a szó hogy Alma így néz ki egy stringben:
0: \'A\'
1: \'l\'
2: \'m\'
3: \'a\'
4: \'\\0\'
tehát strins helyett így is meg lehetne oldani:
\"strins(ebbe, c, i); // mindig hozzáadok az \'ebbe\' változóba egy karaktert, amit frissen generáltam, az \'i\'-edik helyre\" ez helyett

ebbe[ i ] = karakterek[k[k[0]]];// ez


és a ciklus magon kívül, tehát


for(...)


{


}


//ide..


ebbe[ i ] = EOS; //megjegyzem most pont hasznos hogy a ciklus változót nem a ciklus feltételeknél deklaráltad mert így lehet használni itt az értékét. Amúgy nem kell azon kívül deklarálni.


Így már mûködni fog. Egyébként felesleges \"megspékelni\" mert én így tapasztaltam hogy a sa-mp nak elég jó a random szám generátora és eléggé egyenlõ eloszlású. Bõven elég lenne ha csak kiválasztanál egy random karaktert.
« Utoljára szerkesztve: 2014. január 26. - 19:35:26 írta hegdavid95 »

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
[Jelszógenerátor] generateRandomString - Random karakterek generálása
« Válasz #5 Dátum: 2014. január 26. - 20:46:20 »
+1 Show voters
Köszi a tippeket, tanultam belõle, de nekem pont elég volt így, kétszeri használatra :)
Akinek kell hatékonyabban, átalakítja :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal