URL Shortener algoritme?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

Front end developer binnen het onderwijs

Functie Het doel van dit team is om te zorgen dat de studenten altijd op de hoogte zijn van relevante informatie en de mogelijkheid hebben om online vragen te stellen. Hiervoor hebben ze een portal ontwikkeld. De app is echt een greenfield project met een eigen inrichting middels cloud. De ontwikkeling wordt gedaan door gebruik te maken van oa. Javascript, React, CSS, Next.js, GraphQL in een Azure Cloud omgeving. Daarnaast gebruiken ze tooling als Figma, storybook, Jest en Github. De complexiteit in deze rol zit hem in het feit dat data uit verschillende bronsystemen komt waarbij er zowel gekoppeld wordt

Bekijk vacature »

PHP Software Developer

Functie omschrijving Op zoek naar een nieuwe uitdaging binnen PHP? Lees dan snel verder! Wij zoeken een ervaren PHP developer die binnen een organisatie gaat functioneren als verlengstuk van de klant. Wij zoeken voor deze iemand die technisch complexe zaken met enthousiasme en plezier aanvliegt. Verder moet je instaat zijn om je tijd goed te managen omdat je aan meerdere projecten tegelijkertijd werkt. Je werkt met de nieuwste technieken en tijdens deze uitdaging werk je veel samen met de front-end developers van deze organisatie. Wij zoeken iemand die zichzelf graag uitdaagt en altijd de beste wilt zijn. Bedrijfsprofiel Waar ga

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Junior Front end developer

Functie Jij als developer gaat ons helpen onze producten verder te ontwikkelen en in te zetten in de markt. Op dit moment bestaat ons SaaS product uit 3 componenten die zowel los als in een pakket gekocht kunnen worden. Het gaat hier om een online kaartapplicatie, een workflow tool en een monitoring tool. Momenteel zijn wij 3 jaar geleden gestart met de ontwikkeling. De tech-stack waarmee we werken is voornamelijk Javascript, Vue.js en Python. Daarnaast gebruiken wij FaundaDB als database en werken we veel met GIS applicaties. De uitdaging die we momenteel hebben is dat we momenteel een intern team

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij recent jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een erkende werkgever in regio Waalwijk zijn wij op zoek naar een back-end developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in kaart, om ze

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak met

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

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/04/2024 22:44:44
 
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.