URL Shortener algoritme?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Developer / Low-code @ Regio Lelystad

2021-11-11 iSense Developer Low-code Vind jij het leuk om als Ontwikkelaar te werken aan een eindproduct voor verschillende grote klanten in Nederland en voel jij je prettig binnen een familiebedrijf? Lees dan snel verder en solliciteer! ISK50314 Nieuw Organisatie Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De organisatie

Bekijk vacature »

Angular Frontend Software Developer

De vacature Funle is een startup en een spinoff van Semantica. Funle ontwikkelt een nieuw platform voor zelfstandige IT-professionals waarmee we freelancen weer leuk maken. Samen met het core-team van 3 members ga jij helpen de wereld van de IT-bemiddeling op zijn kop te zetten. We zijn op zoek naar iemand die wil bijdragen aan iets groters dan alleen de code die hij/zij schrijft. Als startup heeft Funle behoefte aan een meedenker, iemand met een mening en de vaardigheid om die mening waar te maken. Als je één keer in je leven een verschil wil maken in de wereld van

Bekijk vacature »

.NET Developer

De vacature We zoeken een ervaren .NET Developer, bekend met actuele technieken. Je komt terecht in ons ontwikkelteam, beheert ontwikkeltaken en implementeert een consistent gestructureerde werkwijze. Kennis delen en ontwikkeling stimuleren is belangrijk. Je initieert en beheert het gehele software engineering proces: van het prille begin tot de uiteindelijke release. Er wordt een professionele werkmethodiek toegepast om een optimaal software ontwikkelproces te waarborgen. Op basis van functionele specificaties beheer je zowel het technisch ontwerp als de codering van software. Functie eisen Ervaring met het bouwen van bedrijfsapplicaties Ervaring met het verwerken van grote hoeveelheden data en databases Uitstekende communicatieve vaardigheden

Bekijk vacature »

.NET Developer

De vacature For this vacancy we are looking for a back-end position. We are recreating our powerful tool which has been in the market for the past 25 years. Currently recreating the core, and leading up to a small release. From which we will extend our functionality pool. Functie eisen Pragmatic in finding solutions Problem solver, not reckless in solving Communicative Willing to learn and understand Jouw belangrijkste taken 1. Communication 2. Vacature .NET Developer Cooder.nl 3. Developing 4. Creativity Over PoolManager Poolmanager is specialist in Workforce Management en ontwikkelt al 20 jaar software voor complexe personeelsplanningen en tijdregistratie. Opgericht

Bekijk vacature »

.Net ontwikkelaar

De vacature Als .Net ontwikkelaar bij LISA zorg je er voor dat onze klanten - sportverenigingen - gebruik kunnen maken van slimme applicaties. Je denkt mee, ontwerpt, ontwikkelt, beheert en onderhoudt de LISA producten en daarmee zorg je ervoor dat bonden, verenigingen en leden met plezier gebruik kunnen maken van de applicaties. Functie eisen Innovatief leergierig samenwerken secuur Jouw belangrijkste taken 1. Pro-actief meedenken in de ontwikkeling van diverse applicaties 2. Vacature .Net ontwikkelaar Cooder.nl 3. Implementeren, testen en integreren van componenten in het platform 4. Selecteren en adviseren over de inzet van nieuwe technologieën en methodieken 5. Gedeeltelijk vanuit

Bekijk vacature »

Medior .NET Developer @ Middelburg

2021-07-01 iSense Medior .NET Developer Medior .NET Developer ISBO50178 Nieuw Organisatie De organisatie streeft ernaar de beste werkgever in de regio te zijn, met een stimulerende en informele werksfeer en uitstekende arbeidsomstandigheden. Het is belangrijk dat de organisatie bestaat uit gelukkige, gemotiveerde en gewaardeerde medewerkers. Plezier in je werk wordt voor een aanzienlijk deel bepaald door de arbeidsvoorwaarden. Er wordt gewerkt in teams waarin er op een persoonlijke, directe manier en met humor met elkaar omgaan wordt. Als goede buur werken we voortdurend aan het verbeteren van onze veiligheid, betrouwbaarheid en milieuprestaties en maken we gebruik van de nieuwste beschikbare

Bekijk vacature »

SharePoint Ontwikkelaar - Eindhoven

De vacature Als SharePoint ontwikkelaar ben je verantwoordelijk voor het implementeren van SharePoint/ M365 oplossingen. Daarbij maak je gebruik van standaard functionaliteit, bestaande webparts, zelf gemaakte Apps. Je werkt regelmatig samen met functioneel consultants, architecten, projectleiders, infraspecialisten en testers. Het komt ook voor dat je zelfstandig verantwoordelijk bent voor een (deel) project. Je brengt dan zelf de behoefte van de klant in kaart, maakt een plan van aanpak en presenteert dit aan de eindbeslissers. Daarna begin je aan de uiteindelijke oplossing. Natuurlijk draag je in alle projecten ook je steentje bij aan een effectieve implementatie van het platform en een

Bekijk vacature »

Medior Developer

De vacature Als Developer werk je aan opdrachten voor klanten en onze eigen producten. Je vindt het leuk om in een SCRUM team samen te werken en met oog voor detail samen een project te dragen. Je krijgt energie van het uitdenken van oplossingen en presenteert deze graag met trots naar je collega’s of de klant. Je bent nieuwsgierig, staat open voor nieuwe technieken en wil altijd blijven leren. Je vindt het leuk om mee te denken in het gehele proces en helpt graag mee om het werkt beter en slimmer te doen. Functie eisen Een werkplek in een full-tech

Bekijk vacature »

Backend Developer @ Amsterdam

2021-11-23 iSense Backend Developer Are you a Backend Developer who would like to work for one of the largest and most reputable financial organizations worldwide? Do you want to focus on projects where you will devise and implement the most innovative solutions (in-house) from scratch for recognized organizations (with amongst others Python and Django)? Keep reading! ISKA51814 Organization If you're a Backend Developer, this is your chance to get started at one of the largest and most reputable financial organizations worldwide. With various establishments, this organization forms an important player in the financial market. The company has approximately 5000 employees

Bekijk vacature »

Fullstack Developer @ Amsterdam

2021-11-23 iSense Fullstack Developer Are you a Fullstack Developer who would like to work for one of the largest and most reputable financial organizations worldwide? Do you want to focus on projects where you will devise and implement the most innovative solutions (in-house) from scratch for recognized organizations (with amongst others Python and JavaScript)? Keep reading! ISKA51813 Organization If you're a Fullstack Developer, this is your chance to get started at one of the largest and most reputable financial organizations worldwide. With various establishments, this organization forms an important player in the financial market. The company has approximately 5000 employees

Bekijk vacature »

.NET Software Developer

De vacature Het ontwikkelen en implementeren van kwalitatieve software is waar je actief mee bezig bent als Microsoft Software Developer. Jouw oplossingen leveren direct een bijdrage aan de bedrijfsprocessen van de klant. Je komt te werken in een team waarbij je veel gebruikmaakt van Scrum. Door de ruime ontwikkelmogelijkheden, het volgen van opleidingen en het behalen van certificeringen ben jij altijd up to date van de nieuwste technologieën en tools. Je kan werken voor grote multinationals, ministeries en aansprekende opdrachtgevers met specialisten uit diverse werkvelden om je heen waarmee je dagelijks kunt sparren. Daarnaast krijg je alle mogelijkheden om je

Bekijk vacature »

Senior Frontend Developer - Eindhoven

De vacature As a Senior Front-end Developer at Valtech you deliver the best end-user experience, using all the tools and technologies that are available in our fast-evolving community. Whether your website or application is being used on a pc, mobile device or even an IoT connected device, you know how to take performance to a higher level. You will have a strong focus on the technical aspects of modern front-end development. So, this isn’t restricted to the classical HTML/CSS/Javascript in a web browser. You will also set up front-end CI/CD stacks, automated performance testing and quality assurance. You encourage and

Bekijk vacature »

Startersfunctie .NET Developer @ Regio Eindhoven

2021-10-19 iSense Startersfunctie .NET Developer Heb je onlangs een hbo-, wo-opleiding of een minor richting de IT afgerond OF heb jij middels cursussen je sporen verdiend in het programmeren en wil je graag aan de slag als Fullstack .NET Developer? Lees dan snel verder! Want in januari/februari 2022 start de Experis Academy weer met een leerprogramma waarin IT-experts je opleiden tot developer met als specialisatie .NET. Dit allemaal met een salaris en een vooruitzicht op een baan bij een topwerkgever. ISLE51107 Regio Eindhoven en omstreken Wat houdt de startersfunctie .NET Developer in? Vanaf januari/februari 2022 krijg jij via de Experis

Bekijk vacature »

JAVA Developer

De vacature Java Developers draaien een innovatief idee binnen no-time om in werkende functionaliteit. Met de nieuwste frameworks, op basis van het continuous delivery gedachtegoed. Hiervoor moet je kennis altijd up-to-date zijn. Daarom bieden we je alle ruimte om veel en vlug te leren, samen en individueel via de Ordina Academy en internationale seminars zoals CodeOne (JavaOne), JFall, Devoxx of andere conferenties. Uiteraard gaan we samen ons best doen om jou zo snel mogelijk te introduceren bij één van onze vele klanten. Je wordt daar opgenomen in een team van Ordina Developers en gaat een bijdrage leveren aan de technische

Bekijk vacature »

Java Ontwikkelaar

Binnen ICT Group werkt de business unit Machine & Systems zich bezig met geavanceerde besturingssystemen voor machine- en apparatenbouwers en voor grote systeemintegratoren. Met je collega’s zorg jij ervoor dat producten optimaal functioneren en connected zijn. Internet of Things, Cloud oplossingen en Big Data zijn niet meer weg te denken uit dit marktsegment. We leveren complete producten (hardware, OS en software applicaties) en zijn van toegevoegde waarde door het uitvoeren van complete projecten met resultaatverantwoordelijkheid op één van onze locaties, door het leveren van kennis en ervaring op locatie van onze klanten én door middel van advies trajecten. Requirements in

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/12/2021 22:07:42
 
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.