52 votes

Quel est le meilleur format pour un numéro de client, un numéro de commande ?

Une grande entreprise internationale déploie un nouveau système de traitement des commandes par Internet et MOTO (Mail Order and Telephone Order). Vous êtes chargé, entre autres, de concevoir le format des numéros d'identification des commandes et des clients.

Quel serait, à votre avis, le meilleur format ? Veuillez énumérer toutes les hypothèses et considérations.


Réponse acceptée

La réponse de Michael Haren a été sélectionnée en raison du plus grand nombre de votes positifs, mais veuillez lire les autres réponses et commentaires car ils rendent la réponse de Michael plus complète.

41voto

Michael Haren Points 42641

Allez-y avec tous les chiffres ou toutes les lettres. Si vous devez mélanger, assurez-vous qu'il n'y a pas de caractères ambigus (Il1m, O0, etc.).

Lors de l'affichage/impression, mettez des espaces tous les 3 ou 4 caractères, mais assurez-vous que vos systèmes peuvent traiter les entrées sans les espaces.

Modifier : Une autre chose à considérer est d'avoir un moyen intégré de distinguer les commandes, les clients, etc. Par exemple, les clients commencent toujours avec 10, les commandes commencent toujours avec 20, les vendeurs commencent toujours avec 30, etc.

3 votes

Oui, je dirais que le plus important est de lever l'ambiguïté. Je suis sûr que certaines des entreprises que j'ai appelées par le passé économiseraient beaucoup de budget de service clientèle si elles cessaient de me demander "Êtes-vous sûr que c'est un I et non un 1 ?".

7 votes

Je choisirais les chiffres plutôt que les lettres. Vous aurez besoin d'identifiants plus longs de cette façon, mais vous éviterez le fait que (au moins en anglais américain) tant de lettres se ressemblent au téléphone. Seulement dix chiffres à distinguer contre 26 (+/-, selon la langue) lettres.

0 votes

La base 16 et la base 32 permettent toutes deux d'éviter les ambiguïtés - et vous pouvez normaliser vers la "bonne" base, par exemple l/i/1 -> 1, o/0 -> 0. Cependant, l'utilisation de chiffres est préférable pour les touches 10, y compris les entrées téléphoniques.

31voto

Marty Lamb Points 1330

N'ESSAYEZ PAS encoder N'IMPORTE QUEL des informations mutables sur les clients/commandes dans les chiffres ! Et vous devez supposer que tout est mutable !

Certaines des suggestions ci-dessus incluent un code régional. Les entreprises peuvent déménager. Votre propre entreprise peut se réorganiser et modifier sa propre définition des régions. Les noms des clients/sociétés peuvent également changer.

Les informations relatives aux clients et aux commandes doivent figurer dans l'enregistrement du client ou de la commande. Pas dans l'ID. Vous pouvez modifier l'enregistrement du client/de la commande ultérieurement. Les identifiants sont généralement gravés dans le marbre.

Le simple encodage de la date à laquelle le numéro a été généré dans l'identifiant peut sembler sûr, mais cela suppose que la date ne soit jamais erronée sur les systèmes générant les numéros. Encore une fois, cette information doit figurer dans l'enregistrement. Sinon, elle ne pourra jamais être corrigée.

Est-ce que plus d'un système va générer ces chiffres ? Si c'est le cas, vous risquez de faire double emploi si vous utilisez uniquement des numéros basés sur la date et/ou des numéros séquentiels.

Sans en savoir beaucoup sur l'entreprise, Je commencerais par ce chemin :

  • Un code à un caractère identifiant le type de numéro. C pour les clients, R pour les ordres (n'utilisez pas "O" car il pourrait être confondu avec zéro), etc.
  • Un identifiant du système qui a généré le numéro. La longueur de cet identifiant dépend du nombre de ces systèmes.
  • Un numéro de séquence, unique au système qui le génère. Un simple compteur.
  • Un nombre aléatoire, pour éviter que les numéros de commande/client ne soient devinés. Faites-le aussi long que votre paranoïa l'exige.
  • Une simple somme de contrôle. Pas pour la sécurité, mais pour la vérification des erreurs.

Comme d'autres l'ont souligné, le découpage en segments rend le texte plus lisible pour l'homme.

CX5-0000758-82314-12 est un nombre possible généré par cette approche . Il s'agit de :

  • C : c'est un numéro de client.
  • X5 : la station qui a généré le numéro.
  • 0000758 : c'est le 758ème numéro généré par X5. Nous pouvons en générer 10 millions avant de retirer l'identifiant de cette station ou la station elle-même. Ou bien ne pas mettre de zéros et il n'y a pas de limite.
  • 82314 : ce chiffre a été généré de manière aléatoire et donne une chance sur 100 000 de deviner l'identité d'un client.
  • 12 : checksum.

1 votes

Le code de région n'est pas nuisible s'il est simplement destiné à représenter la personne qui a créé l'ID, plutôt que la région actuelle du client. Utile lorsque vous avez deux systèmes indépendants qui créent des identifiants.

1 votes

Absolument. Dans l'exemple ci-dessus, c'est la deuxième partie du numéro, une sorte de "station ID". C'est juste un nom différent.

17voto

L'un des principaux avantages de l'utilisation exclusive de chiffres est qu'ils peuvent être saisis beaucoup plus efficacement à l'aide de la touche 10.

La longueur de ce numéro doit être aussi courte que possible tout en englobant la totalité de l'espace de l'entité que vous prévoyez de cataloguer avec un peu de marge. Cela peut s'avérer délicat et il faut y réfléchir un peu. Un peu de théorie des ensembles peut vous donner le nombre de clés uniques auxquelles vous aurez accès, étant donné un groupe d'éléments.

Il est naturel, lorsqu'on parle, de décomposer les chiffres en ensembles de deux à quatre chiffres. En insérant des tirets dans un certain schéma, vous pouvez "forcer" le client à les répéter de manière plus efficace et sans ambiguïté.

Par exemple, le 323-23-5344, qui est bien sûr le format du numéro de sécurité sociale, permet d'indiquer au locuteur où il doit faire une pause lorsqu'il prononce le numéro. Il fournit également une délimitation visuelle lors de l'écriture du numéro et facilite la comparaison lors de la copie du numéro.

J'appuie la recommandation selon laquelle le système de commande doit masquer correctement la saisie afin qu'aucun tiret ne doive être saisi à aucun moment. Cette recommandation devrait être appliquée aux formulaires imprimés afin de fournir une indication claire de ce qui doit être saisi. Par exemple, une case imprimée pour chaque chiffre séparé par des tirets imprimés.

Je ne suis pas d'accord pour dire que trop d'informations devraient être intégrées dans ce chiffre, surtout si ces attributs sont susceptibles de changer. Par exemple, disons que nous donnons à "323" la signification de "est un client sympa", mais qu'il appelle quatre fois avec son attitude. Allons-nous alors changer son code client en "324", "est un crétin" ? Et s'ils sont dans la région 04 et qu'ils déplacent leur entreprise dans la région 05 ?

Si cela se produit, vous aurez le choix entre mettre à jour cette clé primaire dans toute la base de données ou vivre avec l'ambiguïté que les informations intégrées dans cette clé ne sont plus fiables, rendant ainsi toutes les informations intégrées dans les clés d'une utilité discutable.

Il est préférable de stocker les attributs susceptibles de changer dans des champs distincts de la base de données et de faire en sorte que le numéro de client soit une clé unique et immuable pour ce client.

0 votes

Bonne réponse. Pour aller dans le sens de votre remarque sur les 10 touches, lorsque vous entrez le numéro sur un téléphone, il est préférable de n'avoir que les chiffres 0-9 :-)

14voto

Jason Baker Points 56682

Pour répondre aux questions de Daniel et Michael, c'est encore mieux si les chiffres séparés ont une autre signification. Par exemple, j'ai travaillé pour une entreprise où les numéros de compte étaient comme ceci :

xxxx-xxxx-xxxxxxxx

La première série de chiffres représente la région et la deuxième série représente le marché au sein de cette région. Une fois que l'on s'est habitué à savoir à quoi correspondent les chiffres, il est devenu très facile de savoir dans quelle région se trouve un compte sans même avoir à consulter le compte du client.

11voto

JohnnyLambada Points 4554

Je fais plusieurs hypothèses pour répondre à cette question ; certaines sont basées sur le fait qu'il s'agit d'une grande organisation internationale, et d'autres sur le fait que le format est pour deux types de tableaux distincts.

Des suppositions basées sur le fait qu'il s'agit d'une organisation internationale :

  • Il est probable que chaque région doive fonctionner de manière indépendante, c'est-à-dire que la région A doit pouvoir ajouter des numéros de clients indépendamment de la région B.
  • Chaque région utilise probablement une langue différente. Pour que les identifiants puissent être facilement tapés par les utilisateurs du monde entier, il est préférable de s'en tenir aux chiffres et aux espaces.

Hypothèses basées sur le fait qu'il y a deux tableaux pour lesquels ce format sera utilisé :

  • Ce format peut être utilisé par plus que les deux tables listées, il doit donc pouvoir gérer un nombre arbitrairement grand de tables.
  • Les utilisateurs expérimentés devraient être en mesure de savoir quel type d'identifiant ils ont sous les yeux sur la base des informations encodées dans l'identifiant lui-même.
  • Il serait bon que les identifiants soient globalement uniques dans l'ensemble du système.

Considérations :

  • Pour une entreprise mondiale, les identifiants peuvent être très longs si seuls des chiffres sont utilisés. Nous devrions essayer de limiter autant que possible la quantité d'informations étrangères encodées dans l'identifiant.
  • Les identificateurs doivent être auto-vérifiables dans une certaine mesure, c'est-à-dire qu'un programme doit être capable de détecter un grand pourcentage d'identificateurs invalides sans avoir à chercher quoi que ce soit. Cela implique une somme de contrôle.

Format proposé : SSSS0RR0TTC

Le format proposé est aussi simple que possible, mais pas plus :

  • C Le premier caractère (le plus à droite) sera une somme de contrôle de tous les autres caractères de l'identifiant. Une simple somme de contrôle suffira. Cela éliminera 90% des erreurs de frappe. Si l'on décide que ce n'est pas suffisant, il est possible de passer à deux chiffres, ce qui éliminera 99 % des erreurs de frappe.
  • TT Les N chiffres suivants représentent le numéro du type de table. Aucun numéro de type de table ne peut contenir le chiffre zéro.
  • Le chiffre suivant est un zéro. Ce zéro sépare le numéro du type de table de celui de la région.
  • RR Les N chiffres suivants sont le numéro de la région. Aucun numéro de région ne peut contenir un zéro.
  • Le chiffre suivant est un zéro. Ce zéro sépare la région du numéro de séquence.
  • SSSS Les N chiffres suivants constituent le numéro de séquence. Ce numéro peut contenir des zéros.
  • Par convention, chaque série de quatre chiffres est séparée par des espaces lorsqu'elle est imprimée ou tapée. En interne, ils ne sont pas séparés, mais cela aide l'utilisateur à les transférer correctement.

Exemples

  • Assumant :

    • Table client type=1
    • Table de commande type=2
    • Code régional pour US-Alabama=1
    • Code régional pour CA-Alberta=43
    • Code régional pour l'Éthiopie = 924
  • 10 1013 - Client n°1 en Alabama (3 est la somme de contrôle : 1 +1 + 1)
  • 10 1024 - Commande n° 1 en Alabama
  • 9259 0304 3016 - client # 925903 à Alberta, Canada
  • 20 3043 4092 4023 - numéro d'ordre 2030434 en Éthiopie

Avantages de cette approche :

  • 90 % des numéros mal saisis seront détectés
  • Il existe un nombre illimité de types de tables
  • Il existe un nombre illimité de régions
  • Il y a un nombre illimité de numéros séquentiels pour chaque table.
  • Les numéros d'identification sont globalement uniques au système. C'est important : un numéro de client ne peut pas être confondu avec un numéro de commande et vice versa.
  • Chaque région peut ajouter indépendamment des numéros de séquence sans clé globale.

Inconvénients

  • Chaque identifiant comporte au moins six caractères
  • Les numéros de type de table et les numéros de région ne peuvent pas contenir de zéro car le zéro est utilisé pour séparer le numéro de séquence du numéro de région du numéro de type de table.

2 votes

Voté contre. Je suis là depuis assez longtemps pour savoir que l'intégration de la signification des numéros d'identification est une mauvaise pratique. Votre client a sûrement une adresse dans votre système logiciel aussi, donc maintenant quand il met à jour son adresse, vous devez la changer à deux endroits. Et si elles ne correspondent pas, comment savez-vous à laquelle vous devez faire confiance ? Un homme avec deux montres-bracelets ne sait pas quelle heure il est.

0 votes

@MaxHodges Alors comment auriez-vous répondu à la question ?

1 votes

Marty Lamb ci-dessous a quelques bonnes idées. Par principe, charger de sens les numéros d'identification des clients, des produits ou autres est une mauvaise pratique. 1) Même si vous êtes prévoyant, il est probable qu'une exception vienne perturber votre système. Un chiffre utilisé pour représenter la couleur d'une pièce fonctionne jusqu'à ce que vous ayez besoin de plus de 10 couleurs. Un chiffre utilisé pour représenter le fabricant d'un article fonctionne jusqu'à ce que vous vous procuriez le même article auprès d'un nouveau fabricant. Même le sexe d'une personne peut changer. 2) il viole les principes de conception de base des valeurs atomiques, minimisant la redondance et minimisant la dépendance. Les numéros d'identification arbitraires et immuables sont les plus efficaces.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X