Hallo ik heb een soort inlog systeem gebouwd.

Mensen krijgen een brief thuis met een unieke code en kunnen inloggen op mijn pagina met die unieke code.

Alleen kan ik geen goede manier vinden om een unieke code te genereren.
MD5 en SHA1 zijn te lang.

Ik zou het liefste die unieke code willen genereren aan de hand van een string die ik opgeef(net zoals bv bij md5).

Is er een manier om MD5 of SHA1 met een maximale lengte van de code.


Alvast bedankt!
pgFrank schreef op 20.11.2007 12:21
1 is uniek, 2 is uniek, 3 is uniek, 4 uniek, en zo kan ik nog wel even doorgaan...

Het is een kwestie van kolom in een databasetabel aanmaken en daar een UNIQUE opzetten. Wat je vervolgens in die kolom gaat wegschrijven, dat mag je zelf weten. Dat het een unieke waarde is, die garantie heb je, het is tevens de enige mogelijkheid om een unieke waarde te genereren. Je moet tenslotte weten welke waardes je in het verleden al hebt gebruikt.

md5, sha1 en andere hashingmethodes hebben hier niks mee te maken, die leveren geen unieke gegevens op.

hi bedankt voor je reactie!
heb het gevonden!

dus ik zou dan met md5 id's kunnen genereren en in die unique kolom kunnen zetten, als de tabel een andere waarde ergens vind die hetzelfde is krijg ik een melding??

thx!

Als je een waarde in probeert te voeren die al bestaat, krijg je inderdaad een foutmelding. Met mysql_errno() kun je controleren welke foutcode je terug krijgt en als dat 1062 is, weet je dat de waarde al bestaat.
Yep, je krijgt een melding: De query zal mislukken en de naam van de constraint (UNIQUE-constraint) doorgeven. Hiermee kun je dus vaststellen dat de code al bestond en vervolgens nog een poging wagen.

MySQL geeft geen naam van een constraint door, uitsluitend de melding dat er ergens een constraint is overtreden. De details mag je dan lekker zelf uit gaan zoeken... Met mysql_errno() krijg je foutnummer 1062 voor je kiezen, maar dit kan dus van alles en nog wat betekenen.

@Blanche: Je doet de aaname dat het deze UNIQUE-constraint is, de zekerheid krijg je alleen door met een SELECT-query to controleren of dat ook daadwerkelijk het geval is. Een tabel kent vrijwel altijd meerdere contraints, denk bv. aan de PK, die kunnen allemaal een foutmelding geven.
Te lang...??

substr(md5(.....), 1, 5);
Wat je kan doen is een MD5 hash maken en daarvan een substr te gebruiken.
Als je een substr() toepast op md5 wil dat overigens niet zeggen dat de string altijd uniek is! Dat is bij een volledige md5-string al niet zo (alhoewel het zelden zal voorkomen dat je exact dezelfde hash krijgt bij 2 strings), maar bij maar 5 tekens wordt de kans op gelijke uitkomsten wel een stuk groter.
het gaat om een een stuk of 12000 verschillende id's

maar ik probeer het wel en zie het vanzelf wel.

ik laat het hier wel even horen.

maar ik wist niet dat md5 zelf ook dubbele waardes konden hebben met verschillende waardes.

is sha1 beter dan md5?

Ja, sha1 is veiliger dan md5. Wanneer je echter een substring daarvan neemt, maakt het geen moer meer uit.

sha1 heeft minder collisions dan md5, intelligent kraken kost dus meer tijd. Brute force kraken kan altijd, maar dan maakt de hashing methode niet meer uit.

Reageren