phpbar.de logo

Mailinglisten-Archive

[php] Lange Zahl kürzen (umrechnen) [kein RegEx]

[php] Lange Zahl kürzen (umrechnen) [kein RegEx]

Sebastian Mendel lists at sebastianmendel.de
Die Sep 28 13:45:25 CEST 2004


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