Menu

Codes ISO de pays et de subdivisions : guide pratique

Les codes ISO de pays existent en trois formes, et les codes de subdivisions ajoutent une quatrième couche. Apprenez lesquels stocker, lesquels afficher et comment gérer les valeurs obsolètes.

Publié le

  • données de test
  • adresse
  • normes

Les codes ISO de pays font partie de ces normes que tout le monde utilise et que presque personne ne lit. Ils ressemblent à un problème résolu — deux lettres, un pays, terminé — jusqu’à ce qu’un formulaire rejette un territoire légitime, qu’un rapport joigne deux tables dont les colonnes de pays étaient écrites dans des formats différents, ou qu’une liste déroulante soit livrée avec une entrée qui n’existe plus depuis des années.

Cet article explique les trois formes de code pays, pourquoi les mélanger provoque des ruptures silencieuses, comment les codes de subdivisions s’articulent en dessous, et ce qu’il faut stocker et valider dans un système qui doit continuer de fonctionner à mesure que la liste évolue.

Les trois formes d’un code pays

La norme internationale des codes de pays définit trois représentations parallèles du même ensemble de pays et de territoires.

Forme Aspect Usage typique
Alpha-2 Deux lettres Échanges de données, listes déroulantes, la plupart des colonnes applicatives
Alpha-3 Trois lettres Reporting, finance, systèmes qui veulent des codes plus lisibles
Numérique Trois chiffres Contextes neutres linguistiquement et systèmes hérités

La forme à deux lettres domine dans le logiciel. Elle est courte, c’est ce que la plupart des services tiers attendent, et elle tient confortablement dans une colonne à largeur fixe. La forme à trois lettres est plus claire lorsqu’un humain la lit hors contexte, ce qui explique sa survie dans le reporting statistique et financier. La forme numérique possède un avantage facile à négliger : les chiffres sont neutres linguistiquement, et un code numérique résiste un peu mieux à certaines erreurs de transcription qu’un code court en lettres, car il n’entre jamais en collision avec un mot ordinaire.

Les trois décrivent le même ensemble d’entités. C’est précisément pourquoi elles causent des ennuis : elles sont interchangeables par le sens et non interchangeables dans une comparaison de chaînes.

Pourquoi mélanger les codes casse les jointures en silence

Une jointure entre deux tables sur une colonne de pays ne fonctionne que si les deux colonnes utilisent la même forme. Si un système stocke le code à deux lettres et un autre le code à trois lettres, la jointure ne renvoie rien, et ce rien est exactement ce qui rend l’opération coûteuse — un résultat vide se confond facilement avec des données manquantes plutôt qu’avec une incompatibilité de format.

La comparaison de chaînes aggrave les choses. Les codes à deux et à trois lettres sont tous deux des majuscules, de sorte qu’une colonne typée en texte accepte les uns comme les autres sans se plaindre. Une colonne de trois caractères accepte les codes à trois lettres sans rien tronquer, mais elle accepte aussi un code à deux lettres complété ou stocké tel quel, et le code en aval qui n’attendait jamais deux caractères peut se comporter bizarrement sans lever d’erreur.

Le remède est de décider une fois, en un seul endroit, quelle est la forme canonique, et de convertir à chaque frontière. Stockez une forme, acceptez-en plusieurs à la saisie, et normalisez immédiatement. Documentez le choix à côté de la colonne, car la prochaine personne à ajouter une intégration ne le devinera pas.

Les codes de subdivisions sont-ils les mêmes que ceux des agences locales ?

Non, et les traiter comme un seul ensemble est une source fréquente d’incohérences. La partie subdivisions de la norme des codes de pays décrit les principales divisions administratives situées sous le niveau du pays, et elle se construit en combinant le code pays avec un code supplémentaire pour la division, séparés par un trait d’union. Cela donne un identifiant mondialement unique pour une division, ce qui est réellement utile lorsque les données franchissent les frontières.

Les listes de codes locales sont autre chose. Les agences statistiques, les opérateurs postaux, les administrations fiscales et les organismes électoraux entretiennent chacun leurs propres divisions et leurs propres codes pour leurs propres besoins. Ces listes recoupent la liste internationale sans coïncider avec elle : elles peuvent utiliser des noms que la norme ignore, scinder ou fusionner les régions différemment, et se mettre à jour selon leur propre calendrier.

La conséquence pratique est que vous ne devez pas supposer qu’une valeur issue d’un système local est un code de subdivision international valide, et que vous ne devez pas envoyer un code international à un système qui en attend un local. Gardez les deux à part, et stockez le code pays à côté de toute valeur de subdivision afin que la paire reste interprétable.

Faut-il un jour inventer ses propres codes ?

Non. Les codes inventés sont indiscernables des codes valides, et c’est là le problème. Une chaîne à deux lettres d’apparence plausible qui ne correspond à aucun pays passera un contrôle de caractères, se triera proprement parmi les vraies entrées et échouera quelque part au loin — sur une étiquette d’expédition, un calcul de taxe ou une agrégation analytique dont les totaux cessent discrètement de s’additionner.

Deux habitudes préviennent l’essentiel des dégâts. Validez les codes de pays contre une vraie liste tenue à jour plutôt que contre un motif, et traitez toute valeur absente de la liste comme un problème à signaler plutôt que comme une valeur à stocker. Lorsqu’un jeu de données a réellement besoin d’un casier pour quelque chose d’inconnu — un import non fiable, un utilisateur qui a refusé de répondre — utilisez une sentinelle explicite et documentée qui ne peut pas être confondue avec un code de pays, et tenez-la hors de toute colonne censée contenir de vrais codes.

D’où viennent les codes obsolètes ou inconnus ?

La norme n’est pas figée. Des entrées sont ajoutées, renommées et retirées à mesure que le monde change, et un système qui tourne depuis des années accumule des valeurs de plusieurs éditions. Le courrier arrive avec le code que connaissait la base de l’expéditeur ; des tableurs circulent avec des codes qui étaient valides au moment de leur export.

Trois situations méritent d’être anticipées. Un code qui a été retiré mais qui figure encore dans d’anciens enregistrements. Un code qui existe dans la norme mais pas dans votre liste déroulante, parce que votre liste a été construite une fois et jamais rafraîchie. Et une valeur qui n’est pas un code du tout, parce qu’un humain a saisi un nom de pays dans un champ qui attendait un code.

Le traitement diffère dans chaque cas. Les enregistrements historiques peuvent conserver leur valeur d’origine tandis que les nouveaux utilisent une valeur actuelle, à condition que la correspondance entre elles soit stockée quelque part. Un code absent de votre liste ne doit pas être rejeté comme invalide, car la faute est plus probablement dans la liste que dans la valeur. Et les noms de pays en texte libre ne devraient jamais atteindre une colonne de codes, ce que le guide sur la validation et la normalisation des adresses traite comme une partie du problème de nettoyage plus large.

Pour les développeurs : stocker, lister et se rabattre

Choisissez une forme canonique pour le stockage — pour la plupart des applications, le code à deux lettres — et soyez strict à son sujet à l’intérieur de votre système. Gardez la conversion dans un seul utilitaire afin qu’un changement d’avis ne soit qu’un changement à un seul endroit.

Choisissez une seule source pour la liste utilisée par les listes déroulantes, la validation et l’affichage, et rafraîchissez-la délibérément. Une liste de codes modifiée à la main à plusieurs endroits finira par diverger d’avec elle-même, et le symptôme visible est un utilisateur dans un pays que le formulaire ne propose pas.

Décidez ce que « inconnu » signifie dans votre schéma avant d’en avoir besoin. Une valeur vide, une sentinelle documentée et une valeur nulle sont trois déclarations différentes, et une seule est la bonne pour un champ donné. Quoi que vous choisissiez, assurez-vous qu’il ne peut pas être pris pour un vrai code par une jointure, une comparaison ou un générateur d’étiquettes.

Enfin, journalisez ce que vous avez rejeté. Lorsqu’un code pays échoue à la validation, enregistrez la valeur et la version de la liste, pas l’enregistrement entier. C’est le seul moyen fiable de distinguer une mauvaise règle d’une mauvaise saisie, et cela garde les données personnelles hors de vos diagnostics. Si le champ alimente aussi un numéro de téléphone, le même principe s’applique au préfixe de numérotation, comme le décrit le guide sur les préfixes téléphoniques et l’appariement avec la localité.

Étapes suivantes

Trouvez toutes les colonnes de votre schéma qui contiennent un pays et vérifiez si elles utilisent toutes la même forme ; une requête de regroupement rapide sur les valeurs distinctes révélera toute colonne qui en contient un mélange. Ensuite, confirmez que votre liste de validation peut être rafraîchie depuis une source unique plutôt que modifiée à plusieurs endroits. Pour voir les codes en contexte, ouvrez une page pays et comparez la manière dont le pays y est identifié avec la manière dont vos propres données le nomment. Si vous avez besoin d’enregistrements d’exemple pour tester la conversion entre formes, générez un lot dans le générateur d’adresses et faites passer les codes par votre utilitaire de normalisation. Ces enregistrements ne contiennent que des valeurs synthétiques, de sorte que les codes qu’ils portent sont du matériau d’exercice — pas un adressage livrable et pas une affirmation sur la résidence de quiconque.

Continuer la lecture

Articles sur Générateur d'adresses fictives