Aller au contenu principal

Atelier 1 : ISBN & UUID - Validation et Génération

ISBN-10 : Format et Validation

Format ISBN-10

Le format ISBN-10 (International Standard Book Number) est composé de 10 caractères:

  • 9 chiffres : 0-9
  • 1 clé de contrôle : chiffre (0-9) ou la lettre X (représentant 10)

Exemple: 3-598-21508-8

Formule de validation ISBN-10

La clé de contrôle est calculée de manière à ce que:

d₁ × 10 + d₂ × 9 + d₃ × 8 + d₄ × 7 + d₅ × 6 + d₆ × 5 + d₇ × 4 + d₈ × 3 + d₉ × 2 + d₁₀ × 1 ≡ 0 (mod 11)

Si le résultat du modulo 11 est 0, alors l'ISBN-10 est valide.

Exemple ISBN-10

Validation de 0-306-40615-2:

  • Chiffres: 0 3 0 6 4 0 6 1 5 2
  • Calcul: (0×10) + (3×9) + (0×8) + (6×7) + (4×6) + (0×5) + (6×4) + (1×3) + (5×2) + (2×1)
  • = 0 + 27 + 0 + 42 + 24 + 0 + 24 + 3 + 10 + 2 = 132
  • 132 mod 11 = 0 ✓ Valide

ISBN-13 : Format et Validation

Format ISBN-13

Le format ISBN-13 (depuis 2007) est composé de 13 chiffres:

  • 12 chiffres : valeurs commerciales
  • 1 clé de contrôle : dernier chiffre (0-9)

Exemple: 978-0-306-40615-7

Formule de validation ISBN-13

La clé de contrôle est calculée avec la formule suivante:

  1. Prendre les 12 premiers chiffres: d₁, d₂, ..., d₁₂
  2. Calculer la somme pondérée (poids alternés 1 et 3):

S = (d₁ × 1) + (d₂ × 3) + (d₃ × 1) + (d₄ × 3) + ⋯ + (d₁₂ × 3)

  1. Calculer le modulo 10:

R = S mod 10

  1. La clé de contrôle est:

d₁₃ = (10 - R) mod 10

Exemple ISBN-13

Validation de 978-0-306-40615-7:

  • Chiffres: 9 7 8 0 3 0 6 4 0 6 1 5 (et clé: 7)
  • Somme pondérée: (9×1) + (7×3) + (8×1) + (0×3) + (3×1) + (0×3) + (6×1) + (4×3) + (0×1) + (6×3) + (1×1) + (5×3)
  • = 9 + 21 + 8 + 0 + 3 + 0 + 6 + 12 + 0 + 18 + 1 + 15 = 93
  • 93 mod 10 = 3
  • Clé de contrôle: 10 - 3 = 7 ✓ Valide

Demandes de l'Atelier

Objectif global

Créer une application Flutter qui permet de valider, générer et gérer des ISBN-10, ISBN-13 et des UUID.

Étape 1 : Implémentation Dart (Logique pure)

Créer un fichier isbn_utils.dart avec les fonctions suivantes:

// Validation
bool isValidISBN10(String isbn);
bool isValidISBN13(String isbn);
bool isValidISBN(String isbn); // Détecte le format et valide

// Génération
String generateISBN10();
String generateISBN13();
String generateUUID();

// Utilitaires
String formatISBN10(String isbn); // Ajoute les tirets
String formatISBN13(String isbn); // Ajoute les tirets

Tester en console Dart avant de passer à Flutter.

Étape 2 : Interface de Validation (Flutter)

Créer un écran avec:

  • TextField pour saisir un ISBN
  • Bouton "Valider"
  • Affichage du résultat:
    • Si valide: ✓ Format détecté (ISBN-10 ou ISBN-13), clé de contrôle
    • Si invalide: ✗ Message d'erreur explicite
    • Lien vers isbnsearch.org si valide

Étape 3 : Interface de Génération (Flutter)

Ajouter une section avec:

  • Dropdown pour choisir ISBN-10 ou ISBN-13
  • Bouton "Générer"
  • Affichage du résultat généré
  • Bouton "Copier" (optionnel)
  • Vérifier que l'ISBN généré est valide avant affichage

Étape 4 : Génération d'UUID

Ajouter une troisième section:

  • Bouton "Générer UUID v4"
  • Affichage de l'UUID
  • Bouton "Copier"

Étape 5 : Validation en temps réel (OPTIONNEL)

Modifier l'interface de validation:

  • Valider au fur et à mesure que l'utilisateur tape
  • Utiliser TextEditingController + onChanged() + setState()
  • Affichage immédiat du résultat (pas besoin de bouton)

Étape 6 : Historique (OPTIONNEL)

Ajouter un historique des ISBN/UUID générés:

  • Afficher les 5 derniers ISBN générés et UUID
  • Bouton "Effacer l'historique"
  • Utiliser ListView (vu au Cours 2)
  • Persister les données avec shared_preferences (vu au Cours 4)

Ressources utiles

  • ISBN Search API : isbnsearch.org
  • UUID Generator : Package Flutter uuid
  • Format ISBN : ISO/IEC 2108