URL Shortener algoritme?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Traineeship Test Engineering Overheid

Traineeship Test Engineering Overheid – Start 1 Maart 2022 Functiebeschrijving: Ben jij recent afgestudeerd of studeer jij dit jaar af aan een bèta gerelateerde hbo- of wo-opleiding? En wil jij de eerste stappen zetten richting een carrière in de IT en werken aan maatschappelijk relevante projecten voor jou en 16.999.999 miljoen andere mensen in Nederland? Bij CGI bieden we jou met het Traineeship Test Engineering dé kans om je verder te ontwikkelen binnen de verschillende onderdelen van testen en de automatisering hiervan! Wat houdt het Traineeship Test Engineering in? Je bent bovengemiddeld geïnteresseerd in bedrijfsprocessen en met name de IT-componenten

Bekijk vacature »

Data Engineer

Data Engineer Utrecht Wil jij samen met onze IT experts uit verschillende disciplines samenwerken aan het digitaliseren en future-proof maken van onze betaaloplossingen? En sta je open voor internationale uitdagingen? Dan is dit de baan die bij jou past! Jouw verantwoordelijkheden Als Data Engineer maak je deel uit van ons Business Acceleration Center (BAC). Je bent verantwoordelijk voor het bouwen en onderhouden van onze databases. Tevens maak je deze klaar om Europees aan elkaar te kunnen koppelen. Je hebt contacten met alle Europese collega's om te kunnen komen tot een goede en veilige koppeling. Met jouw kennis en ervaring ben

Bekijk vacature »

Java ontwikkelaar

Het schrijven van software en applicaties die er echt toe doen, dit doe jij onder andere als Java ontwikkelaar. Wij zoeken een Java ontwikkelaar voor ons hoofdkantoor in Waalwijk voor 40 uur per week. Het schrijven van software en applicaties die er echt toe doen, dit doe jij onder andere als Java ontwikkelaar. DMG, een huis vol mogelijkheden. Als Java ontwikkelaar werk je aan business applicaties, API’s en webservices die zowel binnen het bedrijf als door klanten en/of zakelijke partners worden gebruikt. Op deze manier kunnen we onze klanten nog beter bedienen en kunnen medewerkers hun werk eenvoudiger uitvoeren. Het

Bekijk vacature »

Senior Salesforce Developer

Functieomschrijving Do you want to help shape the global Salesforce environment of the world’s largest HR service provider, defining, building and continuously improving the solution 28.000 people will use on a daily basis? Helping shape the working life of over 500 million talented individuals? As part of building a global Salesforce programme we are looking for multiple experienced Salesforce Developers. You work closely with our Technical lead, product owner and other salesforce developers and consultants to implement and integrate a global package of features based on Sales Cloud, Services Cloud, Marketing Cloud and Bullhorn for Salesforce, including but not limited

Bekijk vacature »

.Net ontwikkelaar gezocht voor een beter milieu!

Bedrijfsomschrijving Dit vooruitstrevende bedrijf maakt al jaren duurzame oplossingen gericht op een circulaire samenleving. In een informele setting wordt er door meer dan 40 medewerkers gewerkt aan hoogstaande en complexe software oplossingen, het IT team bestaat uit ongeveer 15 medewerkers waarvan 8 ontwikkelaars. Het niveau waarop gewerkt wordt ligt erg hoog, dit is ook nodig omdat de eind-producten op internationaal niveau op veel plekken gebruikt wordt. Er heerst hier een hele fijne sfeer waarbij veel mogelijk is, thuiswerken is hier een normaal begrip en het met grote regelmaat faciliteren van trainingen en cursussen is ook vanzelfsprekend in de ogen van

Bekijk vacature »

Servicedesk medewerker

Wil jij impact hebben op onze snelgroeiende business in meer dan 12 landen als Servicedesk medewerker? En werken voor een bedrijf dat bijdraagt aan het duurzaam gebruik van onze schaarse waterbronnen? Het ondersteunen van onze mensen met IT gerelateerde vragen, zodat ze iedere dag kunnen excelleren in hun werk? Zo ja, dan zoeken we jou! Servicedesk medewerker Jij zorgt er als Servicedesk medewerker voor dat de tickets, welke door onze snelgroeiende organisatie worden ingeschoten, worden opgelost. Kun je ze zelf niet oplossen, dan zorg je ervoor dat de tickets worden opgevolgd en opgelost door de verschillende technische teams. Dit kan

Bekijk vacature »

Start-up zoekt Javascript Developer (Google Platfo

Bedrijfsomschrijving Deze snelgroeiende start-up is ter versterking van hun 9-koppige team (waarvan 4 Developers) op zoek naar een Javascript Developer die heel graag wil blijven leren en met de organisatie mee wil groeien! Er wordt hier in een jong en enthousiast team gewerkt aan interessante projecten in het Google Platform. Functieomschrijving Je zal aan veel verschillende en uiteenlopende projecten komen te werken, waardoor geen één dag hetzelfde is. Een voorbeeld is een webapplicatie waarmee een tunnelsysteem 3D in kaart gebracht kan worden. Deze webapplicatie is door de opdrachtgever zo goed ontvangen, dat zij gevraagd hebben of er ook een mobiele

Bekijk vacature »

Business Analyst

Business Analyst Utrecht Toe aan een internationale uitdaging in een nieuw IT team met veel ontwikkelingsmogelijkheden? Kom werken als Business Analyst bij Brink’s Nederland! Jouw verantwoordelijkheden Je komt te werken in het enthousiaste team van Software Development (6-8 collega’s) welke onderdeel uitmaakt van ons Brink’s Acceleration Centre. Het Brink’s Acceleration Centre is recent opgericht en is nog steeds groeiende. Vanuit je team ga je werken aan het centraliseren van grote hoeveelheden informatie. Dit vereist samenwerking met (lokale) IT- en bedrijfsteams van Brink’s, samenwerking met collega’s in andere Europese landen of de US is daarbij vaak nodig. Je gaat nauw samenwerken

Bekijk vacature »

IT-traineeship Low Code Developer

Vind jij het leuk om veel contact te hebben met een klant en je te verdiepen in een domein? Lijkt het je interessant om enerzijds met de klant mee te denken, maar tegelijkertijd ook zelf een bijdrage te leveren aan de implementatie van een IT oplossing? Wij zijn op zoek naar starters die aan de slag willen als low-code engineer. In deze functie bouw je aan applicaties met behulp van een low-code platform, zoals Outsystems, Blueriq, Mendix of Pega. Dergelijke platformen stellen je in staat om snel een werkende applicatie te ontwikkelen en zijn hierdoor heel geschikt voor maatwerk projecten.

Bekijk vacature »

PHP developer fulltime

Als PHP developer bij Getnoticed werk je in een team met acht directe collega’s. Bij ons geen hiërarchie of weken beslissingstijd. Dit betekent korte lijnen en snel schakelen. Dat is ook wel nodig bij alle innovatieve projecten waar we tegelijkertijd aan werken, zoals Google Cloud Talent Solution. Jouw functie bij Getnoticed is voornamelijk het bedenken van oplossingen voor klanten, hen hierin adviseren en het schrijven van koppelingen. Je hebt hier veel vrijheid maar kunt altijd bij collega’s terecht om te sparren. In een week kun je zo voor 4 á 5 verschillende klanten werken. Dit houdt je werk afwisselend. Naast

Bekijk vacature »

Dynamics 365 CRM Developer a.i.

APPLICANTS MUST LIVE IN THE NETHERLANDS For our client we are looking for a Freelance/Interim Dynamics 365 CRM Developer that will assist them in amongst others analyse requirements as defined by the business and documented by the business analysts and create functional and technical designs for development based on these requirements. We are looking for a experience candidate that will fill in the role based on own experience. Client Details APPLICANTS MUST LIVE IN THE NETHERLANDS Key-Account of Michael Page / World leading company in Data Description APPLICANTS MUST LIVE IN THE NETHERLANDS You analyse requirements as defined by the

Bekijk vacature »

Operations Analytics SAP HANA Developer

In this role you will be responsible for the design, build and the technical support of our Analytics solutions built on mostly SAP HANA and SAP HANA Cloud. You will be part of a team building and supporting the Data & Analytics services, focused on enterprise data of the Operations Sector. Functie As a member of the IT Big Data & Analytics team you are part of a team of best-in-class engineers, organized in Agile teams. Our mission is to translate the business challenges into Data & Analytics solutions. You will be part of one of our DevOps teams, working

Bekijk vacature »

IT-traineeship Low Code Developer

Vind jij het leuk om veel contact te hebben met een klant en je te verdiepen in een domein? Lijkt het je interessant om enerzijds met de klant mee te denken, maar tegelijkertijd ook zelf een bijdrage te leveren aan de implementatie van een IT oplossing? Wij zijn op zoek naar starters die aan de slag willen als low-code engineer. In deze functie bouw je aan applicaties met behulp van een low-code platform, zoals Outsystems, Blueriq, Mendix of Pega. Dergelijke platformen stellen je in staat om snel een werkende applicatie te ontwikkelen en zijn hierdoor heel geschikt voor maatwerk projecten.

Bekijk vacature »

startende / junior Java developer

Als startende / junior Java developer krijg je een ervaren Java buddy, mag je opleidingen volgen en ga je direct in een Scrum team Java software ontwikkelen. Je wordt goed begeleid en er is veel ruimte voor innovatie. Bij deze organisatie ga je interessante tastbare maatschappelijke applicaties ontwikkelen. Miljoenen mensen zijn dagelijks afhankelijk van de software. Er zijn 8 Java Scrumteams, waarbij ieder team aan een eigen applicatie bouwt. In ieder team zijn meerdere senior, medior en junior Java developers aanwezig. Daarnaast is er minimaal 1 Tester en een vaste product owner per team. Er wordt regelmatig 'pair programming' toegepast.

Bekijk vacature »

Senior Embedded Engineer

Bedrijfsprofiel: De Haardt BV is een klein bedrijf dat gevestigd is in Elst (Gelderland), met een grote naam in de rental kart wereld. Het bedrijf is 26 jaar oud en is een groot deel daarvan marktleider in de wereld met haar veiligheids- en timing systemen. Onze klanten noemen ons de autoriteit in de markt als het gaat om veiligheid. In Elst is De Haardt constant bezig met het verbeteren van haar producten en het ontwikkelen van nieuwe ideeën tot producten. Met 14 medewerkers, waarvan 10 ontwikkelaars, staat de focus op productinnovaties en dit gebeurd in een informele en prettige werkomgeving.

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

26/01/2022 15:21:01
 
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.