Menu

Longueur des identifiants nationaux : pourquoi les formats diffèrent selon les pays

La longueur d'un identifiant national va de quelques chiffres à plus d'une douzaine de caractères. Découvrez pourquoi une longueur de champ unique ne convient pas à tous les pays et comment valider sans coder en dur.

Publié le

  • données de test
  • identité
  • international

La longueur des identifiants nationaux est la première chose qui casse lorsqu’une équipe internationalise un formulaire. Une colonne dimensionnée pour le numéro d’un seul pays tronquera silencieusement le numéro délivré par un autre pays, et la défaillance ne se manifeste généralement que des mois plus tard, sous la forme d’un ticket d’assistance au sujet d’un client qui ne parvient pas à s’inscrire.

Cet article passe en revue les manières dont les numéros d’identification diffèrent d’un pays à l’autre, pourquoi un même pays peut changer de format au fil du temps, et comment construire un chemin de validation qui survit à ces deux problèmes.

Pourquoi il n’existe pas de longueur universelle

Les numéros d’identification ont été conçus par des administrations nationales, à des fins nationales, bien avant que quiconque imagine un champ de formulaire censé les contenir tous à la fois. Chaque conception reflète une théorie différente de ce à quoi sert le numéro, et cette théorie transparaît dans sa forme.

Certains numéros sont de purs chiffres, dimensionnés pour que la population ne puisse jamais épuiser l’espace. Certains mélangent lettres et chiffres pour gagner de la place sans s’allonger. Certains réservent les caractères de tête à un code de catégorie, à un bureau émetteur ou à une région. Certains intègrent la date de naissance du titulaire. Certains ajoutent un ou deux caractères de contrôle calculés arithmétiquement à partir du reste.

Parce que les conceptions diffèrent, les longueurs diffèrent. Les numéros vont de quelques caractères dans les plus petits systèmes à bien plus d’une douzaine dans les plus grands, et l’étendue est assez large pour que toute règle à largeur fixe soit fausse quelque part.

Les familles de numéros d’identification

Regrouper les numéros par conception plutôt que par pays est le modèle mental le plus utile, car les conséquences pour la validation découlent de la conception et non de la carte.

Famille Forme typique Ce que cela implique pour la validation
Purement numérique Chiffres uniquement, souvent avec un zéro initial Doit être stocké sous forme de texte ; ne jamais convertir en entier
Alphanumérique Lettres et chiffres mêlés à des positions définies Contrôles position par position, et non un simple compte de chiffres
Porteur de date Date de naissance intégrée aux caractères de tête La date doit être une date de calendrier réelle, ce que la plupart des règles oublient
À chiffre de contrôle Caractères de contrôle arithmétiques à la fin Les caractères finaux sont vérifiables, mais uniquement selon la règle publiée
Libre Aucune structure sur laquelle s’appuyer Les limites de longueur et de caractères sont les seuls contrôles honnêtes

Lorsqu’un numéro porte des caractères de contrôle, l’arithmétique est généralement une somme pondérée à laquelle on applique un modulo — la même idée générale que celle utilisée par de nombreux systèmes de numérotation, ce qui explique qu’une seule explication conceptuelle puisse servir plusieurs pays alors même que les constantes diffèrent. Ce que prouve un chiffre de contrôle validé est étroit et doit être énoncé clairement partout où il est documenté : le numéro est cohérent en interne, et non qu’il a été attribué à quelqu’un.

La longueur du champ doit-elle être fixe ?

Non, et c’est l’hypothèse la plus dommageable dans le domaine. Une longueur fixe soit tronque les formats plus longs, soit complète les plus courts, et les deux corrompent la valeur. Le complément est pire que la troncature à un égard : un numéro complété paraît plausible, il passe donc discrètement dans les systèmes en aval avant que quiconque ne le remarque.

Stockez les numéros d’identification sous forme de texte de longueur variable et imposez une limite supérieure généreuse. Cette limite existe pour empêcher un accident de collage de remplir une colonne avec une dissertation, et non pour affirmer que chaque pays utilise autant de caractères. Si l’application a besoin d’une règle propre à un pays, appliquez-la conditionnellement, une fois le pays connu.

Il y a une seconde raison de garder la colonne généreuse. Un pays peut changer de format, et lorsqu’il le fait, les enregistrements existants doivent continuer de fonctionner pendant que les nouveaux suivent la nouvelle règle. Une colonne qui avait exactement l’ancienne longueur n’a pas de marge pour la transition.

Que se passe-t-il lorsqu’un pays change de format ?

Les formats changent, et pas seulement de façon mineure. Un pays peut allonger un numéro lorsque la population dépasse l’espace disponible, ajouter un caractère de contrôle pour réduire les erreurs de saisie, réorganiser les blocs internes, ou remplacer un schéma par un tout autre et accorder aux titulaires une période de transition durant laquelle les deux sont valides.

Pour quiconque écrit de la validation, la leçon est que la règle a une date d’effet. Un vérificateur qui n’accepte que la forme actuelle rejettera tout enregistrement délivré sous la précédente, et ces enregistrements restent valides aussi longtemps que le pays le dit. Un vérificateur qui n’accepte que l’ancienne forme est pire.

En pratique, cela signifie deux choses : conservez les règles de validation datées plutôt qu’intemporelles, et faites en sorte que le message de rejet décrive ce qui ne va pas dans la valeur au lieu d’annoncer que le numéro de la personne n’existe pas. Un formulaire qui accuse un titulaire légitime d’avoir un faux numéro est un formulaire qui génère de la charge de support.

Où les chiffres de contrôle aident-ils réellement ?

Les caractères de contrôle valent la peine d’être implémentés lorsque la règle est publiée, car ils interceptent les deux erreurs de saisie les plus courantes : un caractère mal tapé et deux caractères adjacents saisis dans le mauvais ordre. Les deux modifient l’arithmétique et sont donc détectables.

Le bénéfice s’arrête là. Un caractère de contrôle ne vous dit pas si le numéro appartient à quelqu’un, ne confirme pas que la personne qui le cite en est le titulaire, et ne fait pas du numéro un titre d’identité. Tout processus qui traite un caractère de contrôle validé comme une vérification d’identité s’appuie sur l’arithmétique pour un travail que l’arithmétique ne peut pas faire.

Pour les tests, cette distinction détermine où doit résider la logique du caractère de contrôle. C’est une règle de qualité des données — utile au point de saisie pour intercepter les fautes de frappe, et utile dans une suite de tests pour confirmer qu’un générateur produit des valeurs cohérentes en interne. Ce n’est pas une règle d’authentification, et une fixture qui la traite comme telle encodera une hypothèse de sécurité qui n’est pas vraie. Les valeurs produites par le générateur d’identités et de données de test sont des enregistrements synthétiques conformes au format, et elles sont destinées à exercer des règles comme celles-ci ; ce ne sont pas de vrais numéros et elles ne peuvent pas servir à se faire passer pour l’identité de quelqu’un.

Comment gérer un pays que vous n’avez pas modélisé ?

Gardez un repli honnête. Lorsque le pays est inconnu, ou connu mais non modélisé, acceptez une large gamme de caractères et de longueurs, enregistrez le pays à côté de la valeur, et marquez l’enregistrement comme non validé plutôt que de le considérer silencieusement comme correct.

Deux détails de conception rendent le repli utilisable. Premièrement, rendez les enregistrements non validés visibles dans la supervision, afin que la lacune de couverture soit une quantité connue plutôt qu’une surprise. Deuxièmement, ne laissez jamais le chemin de repli être celui qui s’exécute en production pour un pays que vous avez déjà modélisé — la règle souple est un filet de sécurité, et un filet de sécurité qui attrape tout empêche la règle stricte de se déclencher un jour.

Une comparaison travaillée vaut la peine d’être construite une fois. Prenez le même enregistrement en forme de personne, déclinez-le selon les règles de plusieurs pays, et vérifiez que le champ les contient tous sans complément. Les champs qui survivent à cette comparaison sont généralement ceux qui ont été typés comme du texte depuis le début.

Pour les développeurs : concevoir le champ d’identifiant

Quatre décisions portent l’essentiel du poids lorsque le champ est défini : le type de colonne, la longueur maximale, le jeu de caractères, et l’endroit où vit la validation. Réussissez les trois premières et la quatrième devient simple.

  • Type : texte de longueur variable, toujours, avec une normalisation limitée à la suppression des séparateurs.
  • Longueur : un plafond généreux plutôt qu’une taille exacte, choisi pour que le plus long format national connu tienne avec de la marge.
  • Jeu de caractères : tout ce que l’union des pays modélisés utilise, ce qui en pratique signifie des lettres et des chiffres avec les diacritiques normalisés.
  • Validation : une branche par pays modélisé, aiguillée sur la valeur du pays, plus un repli documenté qui ne supplante jamais une règle modélisée.

Réglez aussi le versant inter-champs. Un identifiant n’a de sens qu’avec le pays qui l’a délivré et, dans certains pays, avec une date de naissance, ces trois champs devraient donc voyager en groupe dans les fichiers de fixtures. Et gardez la note de fixture explicite : ce sont des identifiants synthétiques générés pour les tests logiciels, pas de vrais numéros, et rien à leur sujet ne doit être présenté comme une preuve de l’identité de quiconque.

Étapes suivantes

Auditez la longueur de la colonne d’identifiant dans votre schéma et comparez-la au plus long format que vous prétendez prendre en charge ; si c’est le même nombre, la colonne est trop petite. Générez ensuite un éventail d’enregistrements dans le générateur d’identités à travers plusieurs pays et confirmez que chacun passe vos règles, y compris un provenant d’un pays que vous n’avez pas modélisé, pour prouver que le repli fonctionne. Si vos numéros portent des caractères de contrôle, le parcours des chiffres de contrôle de ce site montre comment l’arithmétique se construit.

Continuer la lecture

Articles sur Générateur d'identités et de données de test