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:
- Prendre les 12 premiers chiffres: d₁, d₂, ..., d₁₂
- Calculer la somme pondérée (poids alternés 1 et 3):
S = (d₁ × 1) + (d₂ × 3) + (d₃ × 1) + (d₄ × 3) + ⋯ + (d₁₂ × 3)
- Calculer le modulo 10:
R = S mod 10
- 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