Unieke code generator
Pagina: « vorige 1 2 3 4 volgende »
Stefan:
26*25*24*10*9*8
Dit is als er geen dubbele letters en cijfers in zitten.
Maar die zitten er wel in.
Gewijzigd op 22/10/2005 22:22:00 door - SanThe -
Stefan:
nee, dan zijn ze niet uniek.
het is 26*25*24*10*9*8 (=11.232.000)
maar heeft idd weinig met php te maken.
het is 26*25*24*10*9*8 (=11.232.000)
maar heeft idd weinig met php te maken.
Dat is inderdaad als elke letter of elk cijfer maar één keer mag voorkomen. Als er dubbelen in mogen zitten, heeft SanThe gelijk.
Gewijzigd op 22/10/2005 22:23:00 door - SanThe -
Jan:
Dat is inderdaad als elke letter of elk cijfer maar één keer mag voorkomen. Als er dubbelen in mogen zitten, heeft SanThe gelijk.
Stefan:
nee, dan zijn ze niet uniek.
het is 26*25*24*10*9*8 (=11.232.000)
maar heeft idd weinig met php te maken.
het is 26*25*24*10*9*8 (=11.232.000)
maar heeft idd weinig met php te maken.
Dat is inderdaad als elke letter of elk cijfer maar één keer mag voorkomen. Als er dubbelen in mogen zitten, heeft SanThe gelijk.
GMTA!
Gewijzigd op 22/10/2005 22:25:00 door Jan Koehoorn
Jan:
GMTA!
Huh, wat is dat?
Great Minds Think Alike!
Jan:
Ik zit net te denken, op een gegeven moment is dat maximale getal bereikt en dan ontstaat er een eindeloze do - while loop. Het zou dus goed zijn om vooraf op het aantal records te checken, denk ik?
Timeout in de loop zetten.
Jan:
Oh da's een oude chat-afkorting:
Great Minds Think Alike!
Great Minds Think Alike!
THANKS ;-) Hahahaha
Gewijzigd op 22/10/2005 22:31:00 door Jan Koehoorn
Quote:
@ Stefan van Iwaarden: Dan moet je oneindig veel if-jes erin zetten, want stel die functie die je daarna maakt bestaat al. Dat moet je dan weer controleren. En bestaat die al, dan moet je wéér controleren.
Dus dit is niet echt een optie.
Dus dit is niet echt een optie.
Oneindig veel ifjes worden in de programmeerwereld veelal in een loop samengevat. Ik denk dat stephan's idee lang niet zo slecht is:
Wat als je het via een while loop aanpakt (ik begrijp dat je liever niet dingen met data erin verwerkt gebruikt?
extreem brakke niet werkende code, maar het gaat om het principe (en het is zondag ochtend, cut me some slack)
function zoeknieuwecode (
while ($found != 1) {
$code = rand();
// zit $code als in de tabel?
mysql_query (select * from tabel where code = $code)
if (mysql_results > 0) {
//nieuwe code zoeken
next;
} else {
return $code
}
}
}
Gewijzigd op 23/10/2005 09:33:00 door Arend a
(denk ik)
Gewijzigd op 23/10/2005 11:22:00 door Hellolo
code die ik gemaakt heb wel, maar volgens mij wordt hij trager naarmate het aantal gegenereerde codes groter wordt.
Het principe is nu:
1) genereer een willekeurige code
2) kijk of hij al bestaat
3) ga net zo lang door tot je een code hebt die nog niet bestaat
4) voeg de code toe
maar vooral punt 3) gaat op een gegeven moment lang duren
eigenlijk zou het beter zo kunnen:
1) maak ALLE codes aan
2) zet ze in een array
3) hussel de array door elkaar
4) geef elke nieuwe bezoeker het volgende element van de array als code
Ja, zoals ik gisteren al zei, op zich werkt die Het principe is nu:
1) genereer een willekeurige code
2) kijk of hij al bestaat
3) ga net zo lang door tot je een code hebt die nog niet bestaat
4) voeg de code toe
maar vooral punt 3) gaat op een gegeven moment lang duren
eigenlijk zou het beter zo kunnen:
1) maak ALLE codes aan
2) zet ze in een array
3) hussel de array door elkaar
4) geef elke nieuwe bezoeker het volgende element van de array als code
Jip:
Voor een unieke code is dat niet voldoende, want wat nu als er twee verschillende mensen lid van je site willen worden vanachter dezelfde computer?
Ik denk dat er een hele kleine kans is dat mensen op de 1000ste miliseconde gelijk zijn.
Dan heb ik ook een oplossing... De username coderen met md5, die mag immers niet (meestal niet) meer dan 1 keer voorkomen...
Jelmer:
md5(microtime());
Ik denk dat er een hele kleine kans is dat mensen op de 1000ste miliseconde gelijk zijn.
Ik denk dat er een hele kleine kans is dat mensen op de 1000ste miliseconde gelijk zijn.
Precies, zo doe ik het dus ook altijd. Voor een 100% waterdichtheid moet je toch naar een van tevoren gegenereerde code toe denk ik. Zie mijn eerdere post.
edit: het is natuurlijk de 1000ste seconde, OF de milliseconde ;-)
Gewijzigd op 23/10/2005 12:44:00 door Jan Koehoorn
Jip:
Dan heb ik ook een oplossing... De username coderen met md5, die mag immers niet (meestal niet) meer dan 1 keer voorkomen...
Ja, of de combi user-pass emdeevijven :-)