URL Shortener algoritme?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

HBO ERP Applicatieontwikkelaar Productiebedrijf

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is gespecialiseerd in houtbouw. Wil jij werken als Applicatieontwikkelaar? Heb jij ervaring met ERP? Vaste baan: HBO ERP Applicatieontwikkelaar Productiebedrijf Digitale Infrastructuur 3.000 - 4.300 Applicatieontwikkelaar Wij specialiseren ons in totaaloplossingen op het gebied van HSB, ruwbouw timmerwerk, gevelbekleding en houten kozijnen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Jouw werkzaamheden als HBO ERP Applicatieontwikkelaar Productiebedrijf: Voor de vacature als Applicatieontwikkelaar

Bekijk vacature »

Front-end ontwikkelaar nabij centraal station Arnh

Bedrijfsomschrijving Vanuit een prachtig pand zeer dichtbij het centraal station in Arnhem ontwikkeld mijn klant websites en web applicaties voor een zeer divers klantenbestand. Van de lokale kruidenier op de hoek tot de KLM, ze behoren allemaal tot haar klantenbestand. Binnen de organisatie werken momenteel 18 ontwikkelaars, variërend van backend PHP ontwikkelaars, front-end ontwikkelaars en designers. Er heerst zeer gezellige werksfeer, met veel ruimte voor eigen inbreng. Functieomschrijving Door de toename van het aantal projecten is mijn klant ter uitbreiding op zoek naar een front-end ontwikkelaar. Je werkt middels front-end tooling mee aan uitdagende projecten voor klanten waarbij zowel webapplicaties

Bekijk vacature »

Medior Software Developer React Node js

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is een SaaS ontwikkelaar binnen de vastgoedsector. Wil jij meewerken aan onze applicaties? Heb je ervaring met node.js? Vaste baan: Medior Software Developer React Node js Vastgoedsector 3.000 - 4.500 Deze werkgever is een SaaS ontwikkelaar die actief is binnen de vastgoedsector. Deze werkgever heeft een sterk kernteam. Onze software ontwikkelaars hebben over het algemeen een academische achtergrond in het bèta spectrum. Onze mensen ontwikkelen en onderhouden een groot aantal tools die samenwerken om

Bekijk vacature »

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

Bekijk vacature »

Backend Software Ontwikkelaar C# .NET

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Zij bieden innovatieve e-commerce projecten aan. Wil jij werken als Software Engineer? Heb jij ervaring met Backend? Vaste baan: Backend Software Ontwikkelaar C# .NET ERP 3.500 - 4.800 Software Engineer Deze werkgever levert toegevoegde waarde én duurzaam rendement op de e-commerce activiteiten van onze opdrachtgevers. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Welke taken horen bij een Backend Software Ontwikkelaar

Bekijk vacature »

Medior+ C# .Net Software Developer

Bedrijfsomschrijving Mijn klant is gevestigd in Den Haag op een goed bereikbare locatie, ook met OV en uiteraard genoeg parkeerplekken! Er werken hier in totaal 80 personen, waarvan er zo'n 10 samen de ontwikkelafdeling vormen. De core business van het bedrijf in een notendop is het verrichten van backgroundchecks bij personen, zodat bedrijven kunnen bepalen of zij met die personen in zee willen gaan. De 10 personen die samen de ontwikkelafdeling vormen bouwen applicaties waarmee deze checks uitgevoerd kunnen worden en daarnaast ook interne systemen waarmee het werk van de 70 niet-IT collega's makkelijker wordt. Er heerst een prettige sfeer

Bekijk vacature »

Pega development - Trainee pega developer - 601947

Vind jij het leuk om echte business software te maken zonder daarvoor gedetailleerde code te hoeven schrijven? Voor ons hoofdkantoor in Waalwijk zoeken wij een trainee Pega developer voor 36-40 uur per week. Vind jij het leuk om echte business software te maken zonder daarvoor gedetailleerde code te hoeven schrijven? Wij leren je werken met het innovatieve platform van Pega en jij verovert de wereld in elke fase van de digitalisering van ons bedrijf. De Mandemakers Groep, een huis vol mogelijkheden. Je neemt deel aan een geweldig traject. We zijn bezig met de invoering van Customer Service, Sales Automation en

Bekijk vacature »

Python Fullstack Ontwikkelaar

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij bouwen web-apps. Wil jij apps ontwikkelen? Heb jij ervaring met Ruby? Vaste Baan: Python Fullstack Ontwikkelaar Node.js 2.800 - 4.500 Full Stack Developer Deze werkgever is een studio die nieuwe bedrijven ontwikkelt en introduceert. Wij ontwikkelen innovatieve producten, systemen en diensten en bouwen vervolgens teams op om ze in bedrijven te schalen. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet

Bekijk vacature »

Full stack developer

Lijkt het je leuk je ICT-kennis breed toe te passen in projecten die zowel technisch uitdagend als maatschappelijk relevant zijn? We zoeken een full stack developer om ons snel groeiende, internationale team te versterken. Als full stack developer help je mee om applicaties te ontwikkelen en te verbeteren, op zowel de front-end als de backend. Dit kunnen zowel IT oplossingen zijn in onze ingenieursprojecten als interne applicaties waarmee bedrijfsprocessen worden gedigitaliseerd. Je bent betrokken bij het ontwerpen, ontwikkelen en testen van de webapplicaties. Je zal zowel zelfstandig als in teamverband kwalitatief goede software producten realiseren, waarbij je volop ruimte krijgt

Bekijk vacature »

Full Stack Developer PHP

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is een psychologisch assessment bureau. Ben jij een getalenteerde full stack developer? Heb je ervaring met PHP? Vaste baan: Full Stack Developer PHP Javascript 3.200 - 4.300 Full Stack Developer Wij weten dat mensen de veranderkracht van een team en organisatie bepalen. Deze werkgever heeft de data, algoritmes en gevalideerde tools om dat te kunnen meten. Maar wij hebben vooral onze psychologen. Zij begrijpen hoe ze mensen en teams hierbij moeten helpen. Bij bij hun

Bekijk vacature »

Medior Sr .NET Developer Software Marketing

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij helpen bedrijven digitaal vooruit. Wil jij werken als Medior-Senior Developer? Kan jij technisch hoogwaardige oplossingen creëren? Vaste baan: Medior Sr Developer Software Marketing HBO 3.100 - 4.800 Medior Senior Developer Deze werkgever levert online marketing- en communicatieoplossingen en maatwerksoftware. Wij houden van een informele werksfeer met uitstekende teamspirit. Het verschil binnen de branche willen wij maken met winnende, innovatieve technologie en door een zeer betrokken, betrouwbare en klantgerichte ICT-partner te zijn voor deze klanten. Deze

Bekijk vacature »

Ervaren Frontend Developer JavaScript Zorgapplicat

Wie wordt jouw werkgever?: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever levert softwareoplossingen voor verschillende zorgmarkten. Ben jij een Front-end Developer? Heb je veel ervaring met Javascript? Vaste baan: Sr Front End Developer Zorgapplicaties Javascript 3.000 - 4.500 Ervaren Front End Developer Ons bedrijf draagt met onze software bij aan de verdere verbetering van de revalidatiezorg in Nederland. Zij werken voor grote klanten. Zij doen omvangrijke projecten die we bij deze werkgever op kantoor realiseren (geen detachering). Zij werken met state-of-the-art technologie en lopen daarin voorop. Wil

Bekijk vacature »

Medior Sr PHP Developer Applicaties

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever levert diensten en oplossingen voor de uitwisseling van digitale en fysieke informatiestromen. Wil jij werken als PHP Developer? Heb jij ervaring als PHP developer? Vaste baan: Medior Sr PHP Developer Applicaties MBO+ HBO 2.800 - 4.300 Medior Senior PHP Developer Als fullservice marketingbureau werken we op alle fronten: e-mail, direct mail, mobile, web en social media. Marketing IT Tools ontwikkelen wij op maat of hebben wij in huis. Bij deze werkgever staan vertrouwen, samenwerkings-

Bekijk vacature »

.NET Developer ICT

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is een full service digital agency bedrijf. Ben jij een .NET Developer? Heb je ervaring met Embrace of Episerver? Vaste baan: .NET Developer ICT Agile Scrum 3.000 - 4.800 .NET Developer Deze werkgever is de Drupal specialist in Nederland. Deze werkgever heeft meerdere vestigingen door Nederland en België heen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Wat wordt er

Bekijk vacature »

Sr React JS Developer ICT

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij ontwikkelen digitale oplossingen die bedrijven ondersteunen. Ben jij een Senior React JS Developer? Heb jij ervaring als Senior React JS Developer? Vaste baan: Sr React JS Developer ICT MBO 3.800 - 4.800 Senior React JS Developer Deze werkgever heeft een gemotiveerd team. Onze kernwaarde zijn Plezier, People, Planet en Profit. Daarom zijn zij open en eerlijk tegen elkaar. Ook hanteren wij korte communicatielijnen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie.

Bekijk vacature »

Pagina: 1 2 volgende »

Wouter De Schuyter

Wouter De Schuyter

18/04/2012 18:05:10
Quote Anchor link
Hallo,

Ik heb onlangs dit domein gekocht en zou dus een persoonlijke url shortener willen maken.

Nu zou ik een algoritme nodig hebben voor de URL's te linken in de DB, dit kan uitraard gewoon met cijfers (id van de url bv) maar dat is niet echt netjes en gaat na verloop van tijd ook niet meer effectief zijn bv meer dan 10000 zijn al meteen 5 characters extra terwijl je met 4 cijfers & letters veel meer mogelijkheden hebt.

Een random string genereren met een lijst characters is een optie, maar dan zou ik voor elke mogelijkheid moeten kijken of dit nog niet in de DB bestaat en dat lijkt mij ook niet de ideale oplossing, stel dat er 100 mogelijke combinaties zijn en 99 zijn er al van gebruikt en het script moet dan telkens een nieuwe string genereren en vergelijken.. Dat kan niet de manier zijn.. Of wel?

Iemand suggesties hoe je dit het best aanpakt?
 
PHP hulp

PHP hulp

06/07/2022 15:19:06
 
Erwin H

Erwin H

18/04/2012 18:22:57
Quote Anchor link
Weet je wat binair is? Wat decimaal is? Wat hexadecimaal is?
En voornamelijk hoe je van een decimaal getal naar bijvoorbeeld een hexadecimaal getal gaat?
Nu, stel dat je nu een stelsel hebt voor 62 (0-9a-zA-Z). Dan worden de decimale getallen in dst stelsel dus:
0 - 0
9 - 9
10 - a
11 - b
60 - Y
61 - Z
62 - 10
63 - 11
123 - 1Z
124 - 20
Zo kan je dus al een heel eind verder gaan en toch gewoon je auto_increment gebruiken in je database.
 
Wouter De Schuyter

Wouter De Schuyter

18/04/2012 18:52:35
Quote Anchor link
Dat heb ik ook net gezien, maar er zijn er die claimen tot 12.000.000 te kunnen gaan met 4 chars, dat kan niet met hexadecimaal :/
 
Erwin H

Erwin H

18/04/2012 19:02:10
Quote Anchor link
Ik had het ook niet over hexadecimaal, maar een stelsel met 62 karakters (sorry, ik heb daar geen naam voor) en 62 tot de 4e = 14.776.336
Dat komt wel aardig in de buurt volgens mij...
 
Jurgen B

Jurgen B

18/04/2012 19:08:14
Quote Anchor link
Dat is inderdaad wat ik ook wilde zeggen (had Erwins reactie ook verkeerd gelezen in eerste instantie). Op die manier ben je wel even bezig voor je aan je 5e character zit.
 
Wouter De Schuyter

Wouter De Schuyter

18/04/2012 19:24:40
Quote Anchor link
Ok nu ben ik mee..
Maar hoe wil je die juist genereren en checken of ze al bestaan?
 
Jurgen B

Jurgen B

18/04/2012 19:44:18
Quote Anchor link
Als je weet hoe je van decimaal naar hexadecimaal (16 tallig stelsel) gaat kan je deze methode ook toepassen op een 62 tallig stelsel. Bij een nieuwe aanvraag voer je een nieuwe regel in de database en zet je het nieuwe id om naar je 62 tallig stelsel. Om te kijken of de url al bestaat zal je denk ik letterlijk op de url moeten zoeken, maar misschien denk ik te moeilijk en is er een efficienter/makkelijker alternatief.
Gewijzigd op 18/04/2012 19:44:45 door Jurgen B
 
Erwin H

Erwin H

18/04/2012 19:44:30
Quote Anchor link
Je kan gewoon een auto_increment laten lopen in je database die je omrekent naar een 4 karakter string. Op zich niet zo moeilijk, hoewel je wel even wat tijd zal moeten besteden aan hoe je van een getal naar de juiste letter gaat.
 
- SanThe -

- SanThe -

18/04/2012 23:02:32
Quote Anchor link
Jurgen B op 18/04/2012 19:44:18:
... kan je deze methode ook toepassen op een 62 tallig stelsel ...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
function omrekenen($getal, $soort, $return = '')
{

    $chars = array_merge(range('0','9'),range('a','z'),range('A','Z'));
    switch($soort)
    {
        case
10:    if($getal > 61)
                    {

                        $return .= omrekenen(floor($getal / 62), $soort, $return);
                    }

                    $return .= $chars[($getal) % 62];
                    return $return;
        case
62:    for($i=0; $i<strlen($getal); $i++)
                    {

                        $search = (ord($getal[$i]) < 64) ? ord($getal[$i])-48 : $getal[$i];
                        $return += pow(62, strlen($getal)-$i-1) * array_search($search, $chars, true);
                    }

                    return $return;
        default:
    return 'Error';
    }
}


$random = rand(0,14776335);
$code = omrekenen($random, 10);
$getal = omrekenen($code, 62);
echo $random . ' => ' . $code . ' => ' . $getal . '<br />';
?>
 
Chris -

Chris -

18/04/2012 23:20:41
Quote Anchor link
Netjes SanThe :)
 
Wouter De Schuyter

Wouter De Schuyter

19/04/2012 09:56:05
Quote Anchor link
De oplossing van SanThe is dan nog de beste, want als ik dechex() gebruik op het ID kan je URL voorspellen..

MAAR

Stel ik heb 13.000.000 links gegeneerd met het script van SanThe.. Dan heb je 90% kans dat de URL al bestaat, hoe los je dit op? Elke keer checken of hij al in de DB zit en indien wel opnieuw genereren?



Vb: bij het generen van 10K items heb ik al meteen 6 duplicates http://pastie.org/3815467
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
    set_time_limit(60);
    error_reporting(E_ALL);

    function
calculate($getal, $soort) {

        $return = '';
        $chars = array_merge(range('0','9'), range('a','z'), range('A','Z'));

        switch($soort) {
            case
10:
                if($getal > 61) {
                    $return .= calculate(floor($getal / 62), $soort, $return);
                }

                $return = $chars[($getal) % 62];

                return $return;
            break;

            case
62:
                for($i = 0; $i < strlen($getal); $i++) {
                    $search = (ord($getal[$i]) < 64) ? ord($getal[$i])-48 : $getal[$i];
                    $return += pow(62, strlen($getal)-$i-1) * array_search($search, $chars, true);
                }

                
                return $return;
            break;

            default:

                return false;
            break;
        }
    }




    $array = $found = array();

    for($j = 0; $j < 10000; $j++) {
        $string = '';
        for($i = 0; $i < 4; $i++) {
            $string .= calculate(rand(0,14776335), 10);
        }


        echo $string . " ";
        if(!in_array($string, $array)) {
            $array[] = $string;
        }

        else {
            $found[] = $string;
        }
    }


    echo "\n\n\n";

    echo "Found " . count($found) . " duplicates (" . round((count($found) / (count($found) + count($array))) * 100, 2) . "%) on " . (count($found) + count($array)) . " items.";
    echo "\n\n";
    echo "Duplicates: \n";

    foreach($found as $item) {
        echo $item . "\n";
    }

?>
Gewijzigd op 19/04/2012 10:44:46 door Wouter De Schuyter
 
- SanThe -

- SanThe -

19/04/2012 11:06:44
Quote Anchor link
@Wouter: Waarom heb je de function niet correct overgenomen? Zoals jij het nu hebt zal ie niet correct werken.
 
Chris -

Chris -

19/04/2012 11:50:53
Quote Anchor link
Je zou eventueel ook 25 miljoen verschillende codes in de database kunnen plaatsen, met een "in gebruik" veld waar je een key op zet. Tijdens het invoeren van een URL voer je een RAND() query uit op de tabel waar "in gebruik" false is.
 
Wouter De Schuyter

Wouter De Schuyter

19/04/2012 12:26:49
Quote Anchor link
SanThe: ziezo met jouw code, maar krijg (logisch) nog steeds duplicates :/

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
    set_time_limit(60);
    
    function
omrekenen($getal, $soort, $return = '')
    {

        $chars = array_merge(range('0','9'),range('a','z'),range('A','Z'));
        switch($soort)
        {
            case
10:    if($getal > 61)
                        {

                            $return .= omrekenen(floor($getal / 62), $soort, $return);
                        }

                        $return .= $chars[($getal) % 62];
                        return $return;
            case
62:    for($i=0; $i<strlen($getal); $i++)
                        {

                            $search = (ord($getal[$i]) < 64) ? ord($getal[$i])-48 : $getal[$i];
                            $return += pow(62, strlen($getal)-$i-1) * array_search($search, $chars, true);
                        }

                        return $return;
            default:
    return 'Error';
        }
    }




    $array = $found = array();
    for($j = 0; $j < 10000; $j++) {
        $string = omrekenen(rand(0,14776335), 10);

        echo $string . " ";
        if(!in_array($string, $array)) {
            $array[] = $string;
        }

        else {
            $found[] = $string;
        }
    }


    echo "\n\n\n";

    echo "Found " . count($found) . " duplicates (" . round((count($found) / (count($found) + count($array))) * 100, 2) . "%) on " . (count($found) + count($array)) . " items.";
    echo "\n\n";
    echo "Duplicates: \n";

    foreach($found as $item) {
        echo $item . "\n";
    }

?>


@Chris: zou dat de correcte oplossing zijn? Zou het zo zijn dat bit.ly het bv doet? Lijkt mij nogal omslachtig..
Gewijzigd op 19/04/2012 12:46:18 door Wouter De Schuyter
 
Kees Schepers

kees Schepers

19/04/2012 12:36:55
Quote Anchor link
Ik zou het ook met noSQL opslaan, met MySQL ga je denk ik wel performance problemen krijgen nadat je een paar tientallen miljoenen url's erin hebt staan ;)
 
- SanThe -

- SanThe -

19/04/2012 14:52:26
Quote Anchor link
Zo krijg je geen duplicates meer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    for($j = 0; $j < 10000; $j++) {
        $string = omrekenen(rand(0,14776335), 10);

        echo $string . " ";
        if(!in_array($string, $array)) {
            $array[] = $string;
        }

        else {
            $j--;
        }
    }

?>
Gewijzigd op 19/04/2012 14:52:46 door - SanThe -
 
Wouter De Schuyter

Wouter De Schuyter

19/04/2012 15:25:54
Quote Anchor link
@Kees wat zou dat voor problemen kunnen geven? MySQL?

@SanThe: hehe, dat is waar. Maar ik ga niet alle hashes uit de DB laden in een array en dan kijken of ze in die array zitten of wel? Stel dat je 14 miljoen records hebt kan dat niet echt performant zijn?
 
- SanThe -

- SanThe -

19/04/2012 15:34:04
Quote Anchor link
Als het in een database staat zou ik het zo ongeveer doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
do
{
    // genereer code
    // SELECT code

}
while (mysql_num_rows() == 1);
// INSERT code
?>
 
Gerhard l

gerhard l

19/04/2012 15:34:54
Quote Anchor link
Ik gebruik de manier van Chris Horeweg tot zover loopt het vloeiend (nog maar 900 urls verkort).
Maar ik denk dat de query wel sneller is dan alle bij langs lopen en kijken of ze al bestaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT short_code FROM short_list WHERE used='0'  ORDER BY RAND() LIMIT 1
Gewijzigd op 19/04/2012 15:35:28 door gerhard l
 
Kees Schepers

kees Schepers

19/04/2012 15:40:20
Quote Anchor link
Wouter DS op 19/04/2012 15:25:54:
@Kees wat zou dat voor problemen kunnen geven? MySQL?


Omdat je met MySQL veel sneller en lastiger moet opschalen als je tientallen miljoenen URL's opslaat. Tevens zal het niet goed performen als je over miljoenen URL's stats gaat genereren.
 
Pim -

Pim -

19/04/2012 15:40:27
Quote Anchor link
Je kan evt nog een hash toevoegen aan de string, zodat het moeilijk/lastig wordt URLs te raden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function encode($id, $hashSize = 100)
{

    $privateKey = 16546354324; // Moet je even checken wat de MAX_LONG waarde is
    $num = $id * $hashSize + ($id * $privateKey) % $hashSize;
    return base_convert($num, 10, 62);
}
function
decode($string, $hashSize = 100)
{

    $privateKey = 16546354324;
    $num = (int) base_convert($string, 62, 10);
    $hash = $num % $hashSize;
    $id = ($num - $hash) / $hashSize;
    if($hash != ($id * $privateKey) % $hashSize)
        return false; // Foute hash
    return $id;
}

?>

Door hashSize te variëren kan je je URL veiliger maken. hashSize = 100 betekent dat je max 100 pogingen nodig hebt om de URL te gokken als je het ID weet.

Deze code werkt trouwens niet omdat base_convert maart to base 36 gaat, maar het idee lijkt me duidelijk.


Toevoeging op 19/04/2012 15:41:49:

@Kees,
Maar noSQL is dan toch niet per se de beste vervanging? Een simpele key->value DB lijkt me een stuk nuttiger.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.