Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Découvrir node.js

Maths et web : Comptage, clé unique, algorithme et IA

Temps de lecture estimé : 10 minutes
Accueil PHP 8 Maths et web : Comptage, clé unique, algorithme et IA

Lorsque l’on commence le développement web, pas besoin d’être un “génie des maths” pour coder, mais comprendre certains principes mathématiques de base peut littéralement changer votre façon de programmer. Cela peut vous aider à créer de meilleurs algorithmes, à comprendre comment sont générées certaines clés ou identifiants, ou encore à saisir plus facilement le fonctionnement de l’intelligence artificielle.

  • Comprendre comment certaines notions mathématiques simples permettent de créer des algorithmes plus efficaces et plus fiables.
  • Savoir générer des identifiants uniques en limitant les collisions, grâce à une analyse du nombre de possibilités.
  • Développer une meilleure intuition pour optimiser ses programmes et éviter les calculs inutiles, utile du web à l’IA.

Dans ce chapitre, nous allons explorer ensemble un chemin très progressif. Nous partirons de notions simples : le comptage, les permutations, les combinaisons. Puis nous irons vers des applications très concrètes dans le développement web : comment organiser des données, comment générer des clés uniques, comment optimiser un algorithme et enfin comment ces mêmes principes se retrouvent dans les systèmes d’intelligence artificielle modernes.

L’objectif est que vous puissiez suivre du début à la fin même si vous n’avez jamais été à l’aise avec les maths. Tout sera expliqué calmement, dans un langage simple, avec des exemples concrets que vous pouvez manipuler mentalement ou dans votre éditeur de code. Prenez votre temps. Et si un passage vous semble complexe, relisez-le une première fois sans pression : vous verrez que les idées se débloquent peu à peu.

Comprendre les bases : compter les possibilités

Avant de parler de code, parlons de quelque chose que vous faites tous les jours sans vous en rendre compte : compter les possibilités.

Imaginons que vous organisiez un petit site web avec un formulaire d’inscription. Vous devez générer un identifiant temporaire pour chaque nouvel utilisateur. Supposons que cet identifiant soit composé de deux lettres. Combien d’identifiants différents pouvez-vous créer ?

Si vous utilisez les 26 lettres de l’alphabet, la question devient : combien de mots de deux lettres existe-t-il ? Vous avez 26 possibilités pour la première lettre, et 26 possibilités pour la seconde. Pour obtenir le nombre total, on multiplie.

  • 26 × 26 = 676 identifiants possibles.

Ce principe est très important : lorsqu’un choix se fait en plusieurs étapes indépendantes, on multiplie les possibilités. C’est la base de beaucoup de systèmes de génération d’identifiants, de codes ou de clés de sécurité sur le web.

Si maintenant vous ajoutez une contrainte, par exemple “les deux lettres doivent être différentes”, ce n’est plus 26 × 26, mais :

  • 26 possibilités pour la première lettre
  • 25 possibilités pour la seconde (puisqu’une lettre a déjà été utilisée)
  • Soit 26 × 25 = 650 possibilités.

Ce simple petit calcul nous amène au concept de permutation.

Permutations : l’ordre compte

Une permutation est une façon d’organiser des éléments quand l’ordre a de l’importance.

Dans notre exemple, le mot AB n’est pas la même chose que BA. Donc chaque réorganisation crée une combinaison différente.

Ce principe est utilisé partout en algorithmique. Par exemple, si vous avez une liste d’articles sur votre site et que vous voulez les afficher dans tous les ordres possibles (pour des tests, des algorithmes ou des jeux), le nombre de permutations augmente très vite.

Si vous avez seulement 5 éléments, le nombre de permutations est :

5 × 4 × 3 × 2 × 1 = 120

On appelle cela la factorielle, notée 5!.

5! = 120

Si vous passez de 5 à 10 éléments, vous passez à :

10! = 3 628 800 possibilités

On comprend vite pourquoi certains calculs explosent en taille et ralentissent les algorithmes. Une machine peut faire beaucoup de choses, mais pas tout, et certainement pas instantanément lorsque le nombre de possibilités devient gigantesque.

C’est pour cela que dans le développement web comme en IA, on cherche souvent à optimiser, c’est-à-dire réduire ce qu’on doit explorer ou calculer.

Combinaisons : l’ordre ne compte plus

Imaginons maintenant un autre cas. Vous voulez choisir 3 couleurs dans une palette de 10 couleurs pour créer un thème graphique. Ici, l’ordre n’a pas d’importance. Choisir rouge, bleu, jaune est la même chose que jaune, bleu, rouge.

On cherche alors non pas des permutations mais des combinaisons.

Le calcul change. On utilise une formule qui permet de compter uniquement les groupes uniques :

Nombre de combinaisons = n! / (k! × (n − k)!)

Où :

  • n est le nombre total d’éléments
  • k est le nombre d’éléments choisis

Dans notre exemple :

  • n = 10 couleurs
  • k = 3 couleurs à choisir
Combinaisons = 10! / (3! × 7!) = 120 combinaisons possibles.

Pourquoi c’est utile dans le web ?
Parce que lorsqu’on structure des données, lorsqu’on crée des systèmes de filtrage, des tags, des champs de formulaire ou des moteurs de recherche, il faut souvent déterminer quelles associations sont uniques, et lesquelles ne le sont pas.

Par exemple, si vous créez un site où les utilisateurs peuvent sélectionner plusieurs catégories de centres d’intérêt, vous devez souvent éviter les doublons ou les enregistrements identiques mais dans un ordre différent.

Les combinaisons permettent de comprendre et de gérer cela proprement.

Transition vers le développement web et les algorithmes

Maintenant que ces trois notions sont posées, vous pouvez probablement sentir le lien avec la programmation :

  • Le comptage vous aide à estimer les possibilités disponibles.
  • Les permutations vous permettent de manipuler l’ordre des éléments.
  • Les combinaisons vous aident à identifier les ensembles uniques.

Ces concepts guident la manière dont vous écrivez vos algorithmes.

Dans le développement web, un algorithme est simplement une série d’instructions logiques permettant à votre programme d’effectuer une tâche :

  • trier des données
  • générer un mot de passe
  • comparer des valeurs
  • rechercher dans une base de données
  • évaluer des probabilités

Et c’est souvent là que les maths entrent discrètement en scène.

Génération de clés et identifiants en développement web

À présent que nous comprenons mieux le comptage, les permutations et les combinaisons, voyons comment cela se traduit concrètement dans le développement web. L’une des situations où ces notions sont particulièrement utiles se trouve dans la génération de clés et d’identifiants uniques.

Dans de nombreux projets web, vous aurez besoin de créer des identifiants : pour les utilisateurs, pour les sessions, pour les articles, pour les tokens d’accès, etc. L’objectif est que cet identifiant soit unique, c’est-à-dire qu’il ne soit pas attribué plusieurs fois.

Si deux utilisateurs recevaient le même identifiant, cela pourrait provoquer des erreurs graves, par exemple l’accès par une personne aux données d’une autre. Il existe plusieurs manières de générer des clés. Certaines sont très simples, d’autres beaucoup plus avancées.

Exemple simple en PHP

Supposons que vous vouliez créer un identifiant composé d’hexadécimal (les chiffres de 0 à 9 et les lettres de A à F). Cela donne 16 possibilités à chaque caractère. Si vous créez une clé de 8 caractères, cela vous fait :

16⁸ = 4 294 967 296 possibilités.

Plus de quatre milliards !
Autrement dit, vous pouvez créer des millions de comptes sans risquer de collision, tant que votre système vérifie avant d’attribuer la clé si elle n’existe pas déjà.

Un code simple en PHP pourrait ressembler à ceci :

function genererCle($longueur = 8) {
    $caracteres = '0123456789ABCDEF';
    $cle = '';
    for($i = 0; $i < $longueur; $i++) {
        $cle .= $caracteres[rand(0, strlen($caracteres) - 1)];
    }
    return $cle;
}

echo genererCle();

Ce script ne génère pas une clé « magique », mais il repose sur l’idée de permutations. Chaque caractère est un choix parmi une liste, et l’enchaînement de ces choix construit la clé finale.

Un exemple en JavaScript

Même principe, mais côté client :

function generateKey(length = 8) {
    const chars = "0123456789ABCDEF";
    let key = "";
    for (let i = 0; i < length; i++) {
        key += chars[Math.floor(Math.random() * chars.length)];
    }
    return key;
}

console.log(generateKey());

Ici encore, chaque caractère est choisi indépendamment. La logique reste la même qu’en mathématiques : on multiplie les possibilités.

Ce que ces exemples nous apprennent

Nous ne choisissons pas les caractères au hasard sans réfléchir : Nous estimons d’abord le nombre de possibilités.

Plus il y a de possibilités, moins il y a de risques de collisions. Et plus il y a de risques de collisions, plus il est nécessaire de vérifier ou d’augmenter la longueur ou le jeu de caractères. C’est un bon exemple de lien direct entre les mathématiques et la sécurité des systèmes web.

Quand il faut réellement garantir l’unicité

Si la sécurité est critique (comptes bancaires, sessions, tokens d’accès API), on ne se contente pas d’un simple tirage pseudo-aléatoire. On introduit des méthodes cryptographiques basées sur des opérations mathématiques complexes (fonctions de hachage, entropie, combinaisons de sources aléatoires, etc.)

Par exemple, les systèmes modernes utilisent souvent :

  • random_bytes() en PHP
  • crypto.getRandomValues() en JavaScript

Ces fonctions produisent des nombres réellement imprévisibles. On ne parle plus simplement de “nombre au hasard”, mais d’aléatoire cryptographiquement sûr.

Algorithmes : organiser, optimiser, prévoir

Passons maintenant aux algorithmes. Un algorithme est simplement une méthode pour résoudre un problème. C’est une recette, une suite d’instructions logiques.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Si vous avez déjà trié une liste (par exemple les titres d’articles par ordre alphabétique), vous avez utilisé un algorithme de tri. Certains algorithmes trient vite, d’autres lentement. Mais ce qui les distingue, souvent, c’est le nombre de combinaisons qu’ils doivent examiner.

Revenons un instant à la factorielle :

  • 5 éléments = 120 possibilités
  • 10 éléments = 3,6 millions
  • 20 éléments = 2,4 trillions

Autrement dit, si un algorithme essaie toutes les possibilités, il peut rapidement devenir inutilisable. C’est pourquoi les développeurs recherchent souvent des façons d’éviter de tester chaque possibilité.

Cette idée centrale est au cœur de l’informatique moderne : réduire le nombre de calculs sans perdre la bonne solution.

Un exemple simple d’optimisation

Imaginons que vous cherchiez une valeur dans un tableau. Si vous parcourez le tableau du début à la fin, c’est une stratégie. On appelle cela une recherche linéaire.

Mais si le tableau est trié, on peut utiliser une recherche dichotomique.
Imaginez que vous cherchiez une page dans un livre. Vous ne lisez pas page après page ; vous ouvrez le livre au milieu, puis vous ajustez.

La recherche dichotomique fait la même chose : elle divise le problème en deux à chaque étape.

Résultat, au lieu d’analyser 1 000 éléments un par un, vous trouvez la réponse en environ 10 étapes. C’est un exemple d’algorithme intelligent : on n’explore pas toutes les combinaisons possibles, on coupe le problème en morceaux.

Comment tout cela se retrouve en intelligence artificielle

L’IA, qu’on parle de réseaux neuronaux ou d’algorithmes d’apprentissage, repose en grande partie sur les probabilités, les combinaisons et la réduction de l’espace des possibilités.

Quand l’IA essaie de reconnaître une image, elle ne teste pas toutes les permutations de pixels. Ce serait impossible. Elle réduit l’information, détecte des formes, pondère des chemins, sélectionne ce qui est pertinent.

Cela ressemble à une énorme optimisation continue : réduire le champ des possibilités pour ne conserver que les réponses les plus probables. Et si vous regardez bien, cette idée est exactement celle que nous avons vue avec les permutations et les combinaisons.

Alan Turing, l’un des pionniers de l’informatique, a travaillé durant la Seconde Guerre mondiale sur la machine Enigma. Cette machine générait des messages chiffrés basés sur des permutations de lettres. Pour casser le code, il n’a pas tenté toutes les possibilités. Il a observé des répétitions, réduit l’espace des combinaisons possibles, et a construit des machines spécialisées pour tester plus vite. Sans comprendre les permutations, l’histoire aurait été différente.

Ce que nous devons retenir, c’est que les mathématiques ne sont pas une montagne inaccessible. Elles sont au contraire un ensemble de petites idées simples, mais puissantes, qui se combinent pour former des systèmes complexes. En développement web, elles se retrouvent partout : dans la génération d’identifiants, dans le tri, dans la recherche, dans la sécurité, dans l’optimisation, et même au cœur des intelligences artificielles modernes.

Mise en pratique dans un mini-projet concret

Nous avons maintenant une bonne compréhension des idées. Nous savons que les mathématiques nous aident à mesurer ce qui est possible, à organiser l’information quand l’ordre compte (permutations) et quand il ne compte plus (combinaisons), et à réduire la quantité de calculs pour rendre les algorithmes plus efficaces. Nous avons aussi vu comment cela s’applique déjà dans la génération de clés et dans l’intelligence artificielle.

Pour terminer ce chapitre, je vous propose de mettre tout cela en pratique à travers un petit projet concret. L’objectif est de créer un petit outil simple mais significatif : un générateur d’identifiants uniques, avec un système de vérification et une réflexion sur la taille de l’espace des possibilités.

Ce mini-projet peut être réalisé aussi bien en local qu’en ligne, avec n’importe quel environnement, même le plus simple. L’important n’est pas l’outil, mais la démarche.

Apprenez à Lancer un serveur local depuis le terminal pour vos tests.

Objectif du projet

Nous allons créer un script qui fait trois choses :

  • Il génère une clé composée de lettres minuscules et de chiffres, par exemple : f83j2k9a.
  • Il vérifie que cette clé n’a pas déjà été générée.
  • S’il la trouve déjà existante, il recommence.

Vous verrez que ce simple mécanisme nous oblige à réfléchir au nombre total de possibilités disponibles et au risque de collision.

Nous allons travailler dans deux versions : une version JavaScript et une version PHP. Vous pouvez choisir celle que vous préférez, ou comparer les deux.

Comprendre l’espace des possibilités avant de coder

Avant même de commencer à écrire la première ligne de code, posons la question mathématique : combien de clés possibles pouvons-nous générer ? Nous allons utiliser comme caractères :

  • Les 26 lettres minuscules : a à z
  • Les 10 chiffres : 0 à 9

Ce qui nous donne un alphabet de 36 caractères possibles. Si notre clé possède 8 caractères, alors on obtient :

36⁸ = 2 821 109 907 456 possibilités.

Plus de deux mille milliards de clés possibles. Autant dire que pour un petit site web, le risque que deux personnes reçoivent la même clé est extrêmement faible.

Ce calcul simple nous donne confiance en notre approche. Il nous évite de coder “à l’aveugle”.

Version JavaScript avec stockage en mémoire

Pour la démonstration, nous allons simuler la base de données avec un tableau. Dans un vrai projet, vous utiliseriez une base de données MySQL ou MongoDB. Le principe reste exactement le même.

const keys = [];

function generateKey(length = 8) {
    const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    let key = "";
    for (let i = 0; i < length; i++) {
        key += chars[Math.floor(Math.random() * chars.length)];
    }
    return key;
}

function createUniqueKey() {
    let newKey = generateKey();
    while (keys.includes(newKey)) {
        newKey = generateKey();
    }
    keys.push(newKey);
    return newKey;
}

// Exemple d'utilisation
console.log(createUniqueKey());
console.log(createUniqueKey());
console.log(createUniqueKey());

Observons la logique :

  • Nous générons une clé, puis nous vérifions si elle existe déjà.
  • Si elle existe, nous la régénérons.
  • Sinon, nous l’acceptons et nous la stockons.

Cela peut sembler simple, mais derrière cette simplicité se trouve une question mathématique que nous avons réglée plus tôt : le nombre de possibilités est suffisamment large pour que cette méthode fonctionne efficacement.

Version PHP avec gestion de l’unicité

Voici la même idée, mais en PHP :

$cles = [];

function genererCle($longueur = 8) {
    $caracteres = 'abcdefghijklmnopqrstuvwxyz0123456789';
    $cle = '';
    for ($i = 0; $i < $longueur; $i++) {
        $cle .= $caracteres[rand(0, strlen($caracteres) - 1)];
    }
    return $cle;
}

function creerCleUnique() {
    global $cles;
    $nouvelle = genererCle();
    while (in_array($nouvelle, $cles)) {
        $nouvelle = genererCle();
    }
    $cles[] = $nouvelle;
    return $nouvelle;
}

echo creerCleUnique();

Même logique, même réflexion mathématique derrière.

Pourquoi ce projet est intéressant

Ce mini-projet montre plusieurs points importants :

  • Nous ne générons pas des valeurs au hasard sans réfléchir.
  • Nous calculons d’abord l’espace des possibilités, pour éviter les collisions.
  • Nous vérifions la clé avant de la valider, ce qui renforce la sécurité.
  • Nous utilisons une approche algorithmique simple et efficace.

Ce genre de démarche se retrouve dans mille situations en développement web : lorsqu’on crée des numéros de commandes, des codes d’invitations, des jetons de connexion, des URLs courtes (comme bit.ly), etc.

La compréhension mathématique permet ici d’écrire un code raisonné, pas juste un code qui “semble marcher”.

Lien avec les algorithmes plus complexes

Si nous avions choisi une clé plus courte, par exemple 4 caractères, l’espace des possibilités serait :

36⁴ = 1 679 616 possibilités.

Cela peut sembler encore large, mais si l’on commence à créer beaucoup d’utilisateurs, ce chiffre diminue très vite. On finirait par devoir recommencer souvent la génération de clés, ce qui rend le programme lent.

C’est exactement ce que nous avons exploré avec les permutations.

Plus le nombre de possibilités est faible, plus il faut d’optimisation. Plus il est grand, plus le système travaille sereinement.

C’est ce même raisonnement que l’on retrouve en intelligence artificielle : l’IA passe son temps à réduire l’espace des combinaisons possibles pour aller à l’essentiel.

  • Elle ne teste pas tout.
  • Elle sélectionne, compare, élimine.
  • Elle cherche le chemin le plus court pour atteindre la solution.

Et tout cela, en réalité, repose sur les mêmes idées que celles que nous avons vues en comptage, en permutations et en combinaisons.


Les mathématiques ne sont pas un monde parallèle réservé aux “surdoués”. Elles sont présentes dans le développement web à chaque instant, mais souvent de manière discrète, presque invisible.

En comprenant comment compter des possibilités, comment l’ordre peut créer des variations différentes (permutations) ou au contraire comment des groupes identiques peuvent être reconnus (combinaisons), on se retrouve mieux équipé pour concevoir des algorithmes fiables, générer des clés uniques sans crainte de collision, optimiser la recherche ou le tri de données, ou même saisir les principes qui se cachent derrière l’intelligence artificielle.

Et le plus intéressant, c’est qu’il ne s’agit pas de théories gigantesques mais de petites idées simples qui, assemblées avec soin, permettent d’accomplir des choses très puissantes.

Le développement web est un domaine où l’on fabrique des outils, des expériences et parfois même des solutions qui facilitent la vie des autres.

Comprendre l’envers du décor, même de façon progressive, vous donne une maîtrise plus profonde et une certaine sérénité. Vous n’êtes plus seulement en train d’écrire du code qui fonctionne, vous comprenez pourquoi il fonctionne. Ce changement fait de vous non pas seulement un exécutant, mais un développeur capable de concevoir, d’anticiper, et d’améliorer.

Continuez à explorer, à questionner, à expérimenter. Les mathématiques ne sont pas une barrière : ce sont des clés. Et vous savez désormais comment les tourner.