Kom ihåg mig?

Få löpnummer att verka slumpmässiga

 
 
Ämnesverktyg Visningsalternativ
Oläst 2011-06-06, 16:42 #1
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
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:
function cipher_number($num$key) {
  
$num = (string) $num;
  
$length strlen($num);
  
$result '';
  for(
$i 0$i $length$i++) {
    
$result .= $key[(int) $num[$i]];
  }
  return 
$result;
}

function 
decipher_number($num$key) {
  return 
cipher_number($numarray_flip($key));
}

$key = array(5,6,1,8,2,9,3,0,4,7);
$number 1337;
$new_number cipher_number($number$key); 
Använd samma nyckel för chiffrering och dechiffrering.
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-06-06, 20:50 #2
klein klein är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2005
Inlägg: 2 225
klein klein är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2005
Inlägg: 2 225
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:
Ursprungligen postat av qson Visa inlägg
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:
$luid 301// Local unique id, auto_increment
$cuid 1// client/system id
$checksum $luid 8// % skall vara ett procenttecken, alltså modulo 
$prefix = ($cuid $checksum) + 1;

$id $prefix $luid
301 => 5301
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:
$cuid intval( (substr($id01))-1) ^ (intval(substr($id1)) % 8
klein är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:38.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017