Toon posts:

[php] random getal van 4letters en 5 cijfers

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoe kan ik in php een random getal creëren waar ik eerst 4 letters krijg en daarna 5 cijfers.

Ik heb al uitgerekend dat er dan zoveel verschillende unieke codes zijn:

456976 * 59049 = 2.697.122.124

(26^4 ) * (9^5) = meer dan 2,5 miljard unieke codes.


Maar het is dus de vraag, hoe ik aan die codes kan komen.

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

http://www.php.net/manual/en/function.rand.php

Om letters te krijgen eerst random van 1 tot 26 natuurlijk, en dat converten naar een letter.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
PHP:
1
<?function get_unique_id(){    $result = "";    $alphabet = "abcdefghijklmnopqrstuvwxyz";    for($i = 1; $i < 5; $i++)    {        srand((double) microtime() * 1000000);        $letter = rand(0, 25);        $current = substr($alphabet, $letter, 1);        $result .= $current;    }    for($j = 1; $j < 4; $j++)    {        srand((double) microtime() * 1000000);        $number = rand(0, 9);        $result .= $number;    }    return $result;}?>

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

ddc, volgens mij is de clue van GoT dat je mensen helpt zelf de dingen uit te zoeken, zonder het helemaal voor te doen. :)

Overigens vind ik die code best omslachtig, een rand tot 26, 48 optellen en dan chr gebruiken vind ik wat mooier.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 08:59 schreef intoxicated het volgende:
ddc, volgens mij is de clue van GoT dat je mensen helpt zelf de dingen uit te zoeken, zonder het helemaal voor te doen. :)
Heb toch niks te doen hier :+
Overigens vind ik die code best omslachtig, een rand tot 26, 48 optellen en dan chr gebruiken vind ik wat mooier.
Laat maar zien dan, want die woorden van jou kom ik ook niet uit :)

[edit]
Volgens mij bedoel je met ASCII werken...

Verwijderd

Topicstarter
hUH, als ik die code gebruik en ik voer hem uit, zie ik niets. Ook niet als ik er achter zet echo"$result";

hoe kan ik die code dan weergeven.

PS, beetje newbie op gebied van lastige functies

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
|:(

Wellicht kun je hem zo aanroepen:
PHP:
1
<?echo get_unique_id();?>

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:01 schreef ddc het volgende:
Laat maar zien dan, want die woorden van jou kom ik ook niet uit :)
't Was btw 60 ipv 48 optellen, foutje :)
PHP:
1
<?$result .= "";srand((double) microtime() * 1000000);for ($i = 0; $i < 4; $i++) {   $letter = rand(1, 26);   $letter += 60;   $result .= chr($letter);};for ($i = 0; $i < 5; $i++){   $cijfer = rand(0, 9);   $result .= $cijfer;};echo $result;?>

Tsja, noem het maar een kwestie van smaak, ik vind dit iets mooier.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


Verwijderd

Topicstarter
Jah, hij doet het, ik zie alleen maar 3 cijfers. Moeten er eigenlijk wel 5 worden. Dat scheelt namelijk ontzettend veel unieke codes :P

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Hmmz, het enige verschil dat ik zie is dat jij dat via ASCII doet. Maar ik zie ook dat ik niet steeds die srand aan hoef te roepen, ik had hier een keer begrepen dat dat wel nodig is, maarja :)

Verder vind ik dat jouw code niet echt verschilt van de mijne.

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Shit hee, ik zit lekker te prutsen vandaag :) 64 optellen, dat moet het zijn :P

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:09 schreef intoxicated het volgende:
PHP:
1
<?$result .= "";srand((double) microtime() * 1000000);for ($i = 0; $i < 4; $i++) {     $letter = rand(1, 26);  $letter += 60;     $result .= chr($letter);};for ($i = 0; $i < 5; $i++){     $cijfer = rand(0, 9);     $result .= $cijfer;};echo $result;?>

Tsja, noem het maar een kwestie van smaak, ik vind dit iets mooier.
Ik vraag me af of jij wel goed php kan dat je achter de for een ; neerzet |:(

En dit:
PHP:
1
<?  $letter = rand(1, 26);  $letter += 60;   ?>

Kan dan beter zo hè:
PHP:
1
<?  $letter = rand(61, 86);?>

...

Verwijderd

Topicstarter
Toch werkt hij niet helemaal goed. Het is nu niet mogelijk om deze code te krijgen.

ZYAT

omdat de Y voor de Z zit, hij zoekt er nu telkens een volgendeletter die na de vorige letterkomt.

Tevens geeft hij in de getallencode telkens maar een code van drie cijfers die maar uit twee verschillende cijfers bestaat.

Het moet eigenlijk wel mogelijk worden dat je dit te zien krijgt, bijvoorbeeld:

ZYAT44739

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:15 schreef ddc het volgende:
Ik vraag me af of jij wel goed php kan dat je achter de for een ; neerzet |:(
Hehe, ddc probeert z'n gezicht te redden >:) :P

NOFI, je hebt gelijk hoor :)

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:15 schreef Sinisa het volgende:
Toch werkt hij niet helemaal goed. Het is nu niet mogelijk om deze code te krijgen.

ZYAT

omdat de Y voor de Z zit, hij zoekt er nu telkens een volgendeletter die na de vorige letterkomt.

Tevens geeft hij in de getallencode telkens maar een code van drie cijfers die maar uit twee verschillende cijfers bestaat.

Het moet eigenlijk wel mogelijk worden dat je dit te zien krijgt, bijvoorbeeld:

ZYAT44739
En je gebruikt mijn code :?

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:15 schreef Sinisa het volgende:
Toch werkt hij niet helemaal goed. Het is nu niet mogelijk om deze code te krijgen.

ZYAT

omdat de Y voor de Z zit, hij zoekt er nu telkens een volgendeletter die na de vorige letterkomt.
Hmm... ik zit hier toch echt bijvoorbeeld tegen 'TCHG46478' aan te kijken hoor :)

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


Verwijderd

Topicstarter
Dan moet ik maar die van jou even gaan gebruiken :)

Verwijderd

Ben niet echt een PHP'er maar heb je niet zoals als Randomize Timer zoals in Visual Basic... die de getallen beetje door elkaar husselt ?

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:20 schreef iroes het volgende:
Ben niet echt een PHP'er maar heb je niet zoals als Randomize Timer zoals in Visual Basic... die de getallen beetje door elkaar husselt ?
Wat denk je dat de bovenstaande scripts gebruiken? :)

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:20 schreef iroes het volgende:
Ben niet echt een PHP'er maar heb je niet zoals als Randomize Timer zoals in Visual Basic... die de getallen beetje door elkaar husselt ?
Dat zou kunnen door het in een array te stoppen en dan array_rand() te gebruiken, maar dan moet je alsnog rand() gebruiken.

Verwijderd

Topicstarter
tnx intoxicated, die van jou doet het prima zo :P
hoewel ik het verschil tussen de twee codes niet helemaal begrijp ben ik toch zeer tevreden met je code :P

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:21 schreef Sinisa het volgende:
tnx intoxicated, die van jou doet het prima zo :P
hoewel ik het verschil tussen de twee codes niet helemaal begrijp ben ik toch zeer tevreden met je code :P
Je moet alleen nog een paar dingen aanpassen zoals hij al aangaf :)

Compleet goede code:
PHP:
1
<?function get_unique_id(){  $result .= "";  srand((double) microtime() * 1000000);  for ($i = 0; $i < 4; $i++)   {       $result .= chr(rand(65, 90));  }  for ($i = 0; $i < 5; $i++)  {       $result .= rand(0, 9);  }  return $result;}?>

en aanroepen met:
PHP:
1
<?echo get_unique_id();?>

Verwijderd

Op donderdag 14 maart 2002 08:56 schreef ddc het volgende:
PHP:
1
<?function get_unique_id(){    $result = "";    $alphabet = "abcdefghijklmnopqrstuvwxyz";    for($i = 1; $i < 5; $i++)    {        srand((double) microtime() * 1000000);        $letter = rand(0, 25);        $current = substr($alphabet, $letter, 1);        $result .= $current;    }    for($j = 1; $j < 4; $j++)    {        srand((double) microtime() * 1000000);        $number = rand(0, 9);        $result .= $number;    }    return $result;}?>
Moet bij rand(0,25) dat ook niet (1,26) zijn want je pakt daarna de 1e, 2e, 3e enzovoorts letter uit alphabet....

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:26 schreef iroes het volgende:
Moet bij rand(0,25) dat ook niet (1,26) zijn want je pakt daarna de 1e, 2e, 3e enzovoorts letter uit alphabet....
Php begint altijd bij 0.

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:21 schreef Sinisa het volgende:
tnx intoxicated, die van jou doet het prima zo :P
hoewel ik het verschil tussen de twee codes niet helemaal begrijp ben ik toch zeer tevreden met je code :P
Ok, mooi, ik kom wel in de credits hè :P :)

Ik zal nog even kort het verschil uitleggen. Allereerst de code van ddc. In zijn script maakt hij een lange rij letters, het hele alfabet. Daarna genereert hij een getal tussen de 0 en 25, dit omdat de letters in een variabele van 0 tot x worden genummerd, in plaats van van 1 tot x. Daarna pakt hij door middel van substr de x'de letter uit zijn alfabet.

Ik maak in feite ook gebruik van zo'n rij letters, maar volgens de specificatie van ASCII. ASCII heeft een rij leestekens van 1 tot 255, waaruit ik in feite ook het x'de teken pak, hoofdletters beginnen bijvoorbeeld bij 65 en lopen dus verder tot 91. Om zo'n random letter uit de ASCII-tabel te halen gebruik ik de functie 'chr', dat staat voor character.

Naar mijn mening was mijn script iets mooier, omdat ik gebruik maak van de ASCII-standaard, maar ddc's script heeft weer als voordeel dat je er makkelijk extra characters in zou kunnen zetten.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
intoxicated: Naar mijn mening is het wel mooier als je zoiets als dit in een functie zet :)

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:33 schreef ddc het volgende:
intoxicated: Naar mijn mening is het wel mooier als je zoiets als dit in een functie zet :)
Altijd beter weten hè :P :)

Naar mijn mening is het idee van GoT dus, dat je mensen een stukje op weg helpt, door ze alleen wat steekwoorden te noemen of een héél simpel stukje script te laten zien. En nou moet hij het zelf maar implementeren :)

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:35 schreef intoxicated het volgende:
Altijd beter weten hè :P :)

Naar mijn mening is het idee van GoT dus, dat je mensen een stukje op weg helpt, door ze alleen wat steekwoorden te noemen of een héél simpel stukje script te laten zien. En nou moet hij het zelf maar implementeren :)
Feit is wel dat Sinisa helemaal geen verstand van php heeft (zoals hij zelf aangeeft) en hij dus eerder het script gewoon copy/paste dan dat hij er zelf nog aan gaat sleutelen.

Als we het dan toch voordoen dan maar meteen goed ;)

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:36 schreef ddc het volgende:
Als we het dan toch voordoen dan maar meteen goed ;)
Tsja, da's jouw mening. Ik vind eigenlijk dat mensen het beste leren programmeren als ze zelf eens wat moeten uitzoeken.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op donderdag 14 maart 2002 09:36 schreef ddc het volgende:

[..]

Feit is wel dat Sinisa helemaal geen verstand van php heeft (zoals hij zelf aangeeft) en hij dus eerder het script gewoon copy/paste dan dat hij er zelf nog aan gaat sleutelen.

Als we het dan toch voordoen dan maar meteen goed ;)
Ik denk dat ie op deze manier ook niet echt meer verstand heeft gekregen van php. Dus eigenlijk is hij er niet zo heel eerg mee opgeschoten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Op donderdag 14 maart 2002 09:37 schreef intoxicated het volgende:
Tsja, da's jouw mening. Ik vind eigenlijk dat mensen het beste leren programmeren als ze zelf eens wat moeten uitzoeken.
Dat vind ik ook. :)
Helaas komt daar in de praktijk weinig van terecht :(

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Ik zou zeggen:

ga eens wat leuk spelen met random getalletjes tot 26, en chr()

[edit]
intoxicated: en ik vind nog steeds de semicolons achter al je }'s niet mooi! Maar dat wist je al :)

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 14 maart 2002 09:41 schreef eamelink het volgende:
ga eens wat leuk spelen met random getalletjes tot 26, en chr()
Spuit elf :)
Dat zei ik 30 posts terug ook >:)
[edit]
intoxicated: en ik vind nog steeds de semicolons achter al je }'s niet mooi! Maar dat wist je al
AAARCH... Banging my head against the wall |:( :( :'(

(sorry)...

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

We kunnen ook een webstrijdje houden, wie de snelste code hiervoor schrijft in php :)

Maar dan gebruiken we natuurlijk wél de mersenne twisted random reeks, want dit is natuurlijk zoooooo voorspelbaar, dit heeft weinig met een random code te maken.

Moet je voor de grap maar eens 10000 keer achter elkaar een rand() tot de 10000 ofzo aanroepen, dan zie je leuke dingen :)

Verwijderd

Overigens is het ook nuttig om de bestaande code archives te kennen voor je begint te vragen:

Via http://www.zend.com/codex.php kom je al heel snel hier:
http://www.zend.com/codex.php?CID=282 en daar had je nog gevonden wat je zocht ook.

Hier staat ook wel veel, vooral nuttig om eens wat articles door te lezen:
http://www.phpbuilder.com

Verder kan ik je vertellen, een functie kan nog zo complex zijn, je ziet altijd meteen of ie iets returned of dat ie dat niet doet. Achter een return iets zetten in een functie heeft geen nut, want het is tenslotte een return en dan kapt de functie ook.

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Op donderdag 14 maart 2002 08:42 schreef Sinisa het volgende:
[...]
Ik heb al uitgerekend dat er dan zoveel verschillende unieke codes zijn:

456976 * 59049 = 2.697.122.124

(26^4 ) * (9^5) = meer dan 2,5 miljard unieke codes.
[...]
Het zijn er zelfs nog meer, je vergeet de 0 :)

456976 * 100000 = 45.697.600.000

(26^4 ) * (10^5) = meer dan 45 miljard unieke codes.

dat scheelt weer :P
Pagina: 1