Mailinglisten-Archive |
Michael Schoenboeck schrieb:
> Moin,
>
> Also, ich habe lauter 18 stellge zahlen (IDs) in einer DB.
> Jetzt will ich die anzahl der stellen verkleinern, aber nicht in dem ich
> einfach ein paar werte weglasse, sondern am liebsten mit einer formel, also
> irgentwas dividiert durch oder so.
> So das der wert kleiner wird aber denn noch eindeutig ist!
> Also das es nich vorkommen kann, das eine andere 18 stellige zahl mit der
> formel das selbe ergebniss liefert wie wo anders..
>
> Es draf auch ein STRING rauskommen, also HEX oder was weis ich.. Nur sollte
> sich die anzahl der zeichen reduzieren ohne die eindeutigkeit zu
> verlieren...
rechne doch einfach in eine andere Basis um z. B. 16 (HEX) oder noch
besser 62 (HEX + G-Z + a-z) macht 10 stellig
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
--------------------------------------------------------------
01234567891111111111222222222223333333334444444444555555555566
0123456789012345678901234567890123456789012345678901
siehe Basisumrechnung
000.000.000.000.000.000 = 00000000000
000.000.000.000.000.001 = 00000000001
...
000.000.000.000.000.061 = 0000000000z
000.000.000.000.000.062 = 00000000010
...
999.999.999.999.999.999 = 7kBbTme0sB1
999.999.999.999.999.999 / 62 MOD: 7 = 7
= 16.129.032.258.064.516 / 62 MOD: 46 = k
= 260.145.681.581.685 / 62 MOD: 11 = B
= 4.195.898.090.027 / 62 MOD: 37 = b
= 67.675.775.645 / 62 MOD: 29 = T
= 1.091.544.768 / 62 MOD: 48 = m
= 17.605.560 / 62 MOD: 40 = e
= 283.960 / 62 MOD: 0 = 0
= 4.580 / 62 MOD: 54 = s
= 73 / 62 MOD: 11 = B
= 1 / 62 MOD: 1 = 1
man könnte natürlich noch beliebige Zeichen dazunehmen und somit die
Basis erhöhen und in einem noch kürzeren String zu enden, z. B.
()[]!?,.=;:#-_+*§$%&/
wobei das aber bei den meißten Zeichen wenig Sinn hat wenn die ID als
URL-Paramter übergeben werden soll.
--
Sebastian Mendel
www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime www.sf.net/projects/phptimesheet
php::bar PHP Wiki - Listenarchive