Avatar billede d.kryger Praktikant
30. januar 2006 - 10:17 Der er 8 kommentarer og
1 løsning

Autogenerer 800 koder

Hej eksperter.

Jeg skulle gerne bruge en kode hvor jeg kan autogenererer 800 forskellige koder på 8 tegn med både bogstaver og tal. Det er meget vigtigt at 2 koder ikke er ens. Kan nogen hjælpe mig med det?
Avatar billede polle007 Nybegynder
30. januar 2006 - 10:31 #1
prøv med denne


$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$koder = array();
$antal = 800;
$kodelen = 8;

for($i=0; $i<$antal; $i++){
    do{
        $s = "";
        for($j=0; $j<$kodelen; $j++){
            $rnd = rand(0, strlen($chars)-1);
            $s .= $chars[$rnd];
        }
    }while(array_search($s, $koder)); // fortsæt indtil koden er unik

    $koder[] = $s;
}


// udskriv
echo "<pre>";
foreach($koder as $kode) echo $kode."\n";
echo "</pre>";
Avatar billede polle007 Nybegynder
30. januar 2006 - 10:33 #2
Hvis du benytter en PHP version mindre end 4.2, skal du seede randomgeneratoren først. Taget fra PHP-manualen:


// seed with microseconds
function make_seed()
{
  list($usec, $sec) = explode(' ', microtime());
  return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());

.. generer koder
Avatar billede olebole Juniormester
30. januar 2006 - 12:05 #3
<ole>

'mt_rand' giver langt bedre 'tilfældighed' - og så skal strengen vel både indeholde tal og bogstaver ... og ligeså mange tal som bogstaver, hvis der skal være ligemange af hver:

$hashTbl = array();
function getRandStr($len=8) {
    $char = "0123456789abcdefghijklm9876543210nopqrstuvwxyz0123456789ABCDEFGHIJKLM9876543210NOPQRSTUVWXYZ0123456789";
    $s = "";
    while (strlen($s)<$len) {
        $rand = mt_rand(0, strlen($char)-1);
        $code = $char[$rand];
        if (!$hashTbl["x".$code]) {
            $s .= $code;
            $hashTbl["x".$code] = 1;
        }
    }
    return $s;
}

$aRet = array();
for ($i=0; $i<800; $i++) $aRet[] = getRandStr();
print implode("<br>\n", $aRet);

- og så er det _dramatisk_ bedre performende at bruge en hash-tabel i stedet for et array og 'array_search'  =)

/mvh
</bole>
Avatar billede olebole Juniormester
30. januar 2006 - 12:08 #4
Vil du have et andet antal tegn end otte, skriver du blot:
    for ($i=0; $i<800; $i++) $aRet[] = getRandStr(24);

- hvilket sært nok giver 24 tegn i hver streng  ;o)
Avatar billede polle007 Nybegynder
30. januar 2006 - 12:10 #5
Mht performance, så er det vel ret ligegyldigt, hvis koderne blot skal genereres en enkelt gang
Avatar billede olebole Juniormester
30. januar 2006 - 12:26 #6
Nej, fordi hele idéen med Eksperten er 'Vidensdeling'. Når en anden bruger senere finder dette spm. under en søgning, skal han have den bedst mulige kode ... ikke en, der performer dårligt. Vi kan jo nemlig ikke vide, om han skal generere mange koder online - eller om han skal generere 800 koder én gang.

Det eneste, vi kan vide, er, at vi skal skrive en så god kode, som det overhovedet er muligt  ;o)
Avatar billede d.kryger Praktikant
30. januar 2006 - 13:09 #7
Tak for forslagene. Jeg har brugt oleboles, da jeg også gerne vil kunne bruge det senere på en online side, så performance har noget at sige.

-> OleBole: læg et svar og du får point!
Avatar billede olebole Juniormester
30. januar 2006 - 13:11 #8
- og det er hermed gjort  :)
Avatar billede olebole Juniormester
30. januar 2006 - 13:15 #9
- tak for points  :)
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel