Avatar billede supersquirrel Nybegynder
24. august 2007 - 12:55 Der er 9 kommentarer og
1 løsning

rand med både tal og bogstaver

Hejsa,

Jeg har helt glemt rand funktionen, så nu bliver jeg nød til at spørge her.

Jeg skulle gerne have lavet en rand funktion der laver vilkårlig 6 cifret kode, både med bogstaver og tal - Gerne store og små.

Er der nogen der kan smide den her? :D
Avatar billede michael_stim Ekspert
24. august 2007 - 13:06 #1
function randomString($len) {

        $allow = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz234567892345678923456789";
        srand((double)microtime()*1000000);
        for($i=0; $i<$len; $i++) {
                $password .= $allow[rand()%strlen($allow)];
        }
        return $password;

}

$kode = randomString(6);
Avatar billede supersquirrel Nybegynder
24. august 2007 - 13:14 #2
Tak for det :)
Smid svar
Avatar billede michael_stim Ekspert
24. august 2007 - 13:21 #3
Ellers tak, samler ikke på point ;o) Läg et svar selv og accepter.
Avatar billede olebole Juniormester
24. august 2007 - 16:02 #4
<ole>

Der mangler et stort og et lille 'o' - og et stort 'I' - og '0' og '1' - i strengen. Samtidig mangler en bunke tal, hvis fordelingen mellem tal og bogstaver skal være lige.

Det 'internationale' alfabet indeholder 26 tegn, så der er (eller burde være) 52 alfa-tegn ialt - men kun 10 nummeriske. Tallene 0-9 bør derfor være repræsenteret 5 gange, hvis fordelingen mellem tal og bogstaver skal være nogenlunde lige  ;o)

- og endelig er mt_rand langt mere 'tilfældig':

function randomString($len=12) {
        $allow = "0123456789ABCDEFGHIJKLM0123456789NOPQRSTUVWXYZ0123456789abcdefghijkm0123456789nopqrstuvwxyz0123456789";
        $allowLen = strlen($allow);
        for($i=0,$j=$len; $i<$j; $i++) {
                $password .= $allow[mt_rand(0, $allowLen-1)];
        }
        return $password;
}

/mvh
</bole>
Avatar billede arne_v Ekspert
24. august 2007 - 16:09 #5
Jeg vil gaette paa at de undladte tegn er undladt bevidst fordi de nemt kan forveksles.
Avatar billede michael_stim Ekspert
24. august 2007 - 17:45 #6
1. Det er sjældent man ser passwords med lige mange tal og bogstaver, og det er vel underordnet i et autogenereret password om der er lige mange bogstaver og tal, eller? Har netop added flere tal for at chancen for at få et med er størrer.
2. Ved ikke om man har brug for en mere tilfældig generator i det tilfælde.
3. Og som Arne siger er de udeladt med vilje.
Avatar billede arne_v Ekspert
24. august 2007 - 18:03 #7
"mere tilfaeldig" er et lidt uldent begreb i forbindelse med pseudo random number generatorer.

Den store fordel ved mt_rand er at den er ens paa alle platforme mens rand bruger
C's rand og dermed er implementationen platform specifik.

mt_rand har en meget laengere cycle end rand paa ihvertfald alle de mest gaengse platforme.

Og mt_rand har ingen low bit svagheder som er set i forskellige rand implementationer (fordi de ofte er LCG baserede).
Avatar billede arne_v Ekspert
24. august 2007 - 18:09 #8
Jeg har selv lavet tilsvarende password generatorer i Pascal, Java, C# etc..

Men der er et par sikerheds aspekter man skal vaere opmaerksom paa.

Hvis algoritmen er kendt og genererings tidspunktet er kendt indenfor faa sekunder,
saa er antal mulige passwords ret begraenset.

Hvis man genererer flere passwords i samme koersel og algoritmen er kendt, saa
vil det hvis cycle er kort (og her er mt_rand saa meget bedre end rand paa
de gaengse platforme) vaere muligt for en med et password at indskraenke
de mulige passwords for andre til ganske faa.
Avatar billede supersquirrel Nybegynder
25. august 2007 - 17:47 #9
michael smid du bare et svar.. :P
Avatar billede supersquirrel Nybegynder
25. august 2007 - 17:48 #10
Nå ja hov, smider selv :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester