![]() |
Få löpnummer att verka slumpmässiga
Håller på med ett bokningssystem och försöker komma fram till ett säkert sätt att generera unika bokningsnummer från två fristående system.
Jag vill använda något liknande auto increment men med en extra siffra som identifierar vilket system som skapat bokningen. Jag vill dock att dessa sekventiella (inkrementella) nummer att verka slumpmässiga, men jag vill fortfarande hålla nere längden på numren så mycket som möjligt. Just nu har jag följande kod för att skapa unika nummer: PHP-kod:
302 => 8302 303 => 7303 Villfå dessa tal att "verka" mer slumpmässiga. Nu kan man ju följa nummerserien om man skippar första siffran. Dock vill jag ha kvar möjligheten att kunna få fram CUID ur numret, vilket jag kan nu genom följande formel: PHP-kod:
|
Mcrypt är det vanliga i php, kommer dock inte native. Annars kan du använda base64_encode men om grundproblemet anses som en säkerhetsrik så bör du absolut titta på Mcrypt. Har du testa att google typ, php decryption script
|
Är det viktigt för dig att man inte ska kunna följa nummerserier så låter det som att en hashad sträng är rätt för dig. då får du ha en översättningstabell mellan hashen och det ursrpungliga ID hos respektive bokningsbolag. Men du kanske inte har eller vill sätta upp en sådan tabell?
|
Jag ser detta absolut inte som "säkerhetsrisk". Det är bara skönhetsgrejer.
base64 ger även bokstäver vilket jag inte vill ha, och dessutom +30% mer data (=längre bokningsnummer) mcrypt har jag inte tänkt på, men misstänker att även det det ger längre bokningsnummer. Skall göra ett test med mcrypt och se vad jag får för resultat. |
Lägg in ett extra idfält för unika icke-sekventiella id.
Eller slopa det sekventiella, använd inte auto increment. |
Citat:
Dock vill jag fortfarande hålla bokningsnumrena så korta som möjligt, därför har jag använt auto_increment med ovanstående omräkning. Citat:
|
Citat:
upprepa insert med ett slumpid tills den tar emot det, tex: insert into tabell (ID,...) values (floor(1+(rand()*999999)),...) |
OCR-nummer för bankgiro och plusgiro innehåller ofatst två siffror, en för längden och en som är checksiffra. Något sådant kanske?
|
Ska de verka slumpmässiga men ändå bära med sig all nödvändig information kan du använda ett enkelt chiffer. Så här kan man göra i PHP:
PHP-kod:
|
Citat:
Kod:
insert into tabell (ID,...) values (floor(5000+(rand()*999)),...) Kod:
insert into tabell (ID,...) values (floor(6000+(rand()*999)),...) Kod:
insert into tabell (ID,...) values (floor(7000+(rand()*999)),...) |
Chiffer verkar trevligt. Det är nog vad jag söker.
Om jag konstant använder samma chiffer med löpnummer är jag väl garanterad att aldrig få två lika resultat (som man kan få med hashar). Spåna gärna vidare! Det är mycket intressant! |
I några webshoppar som jag skrev för några år sedan, så körde jag med tidsnummer. Typ datum och tid.. Man kan köra UNIX Time stamp också, som räknar antalet sekunder sedan 1970 och sedan köra med annan bas. Har gjort i de någon SEO projekt, där använt basen 36 istället för 10, på sätt få ner storleken på strängarna.
Citat:
|
Alla tider är GMT +2. Klockan är nu 08:41. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson