Format international numéros de téléphone

WRInaute accro
Bonjour,

Ça fait un moment que je cherche le format optimal pour enregistrer et afficher des numéros de téléphones au format international.

J'ai regardé quelques explications:
http://en.wikipedia.org/wiki/Telephone_numbering_plan

Le format le plus standard semble être du style:
Code:
+3284123456
préfixe pays: +32, préfixe régional: 084, numéro: 123456

Mais ce format n'est pas ce qu'il y a de plus facile à lire pour les utilisateurs afin de composer le numéro, je cherche le moyen pour que ce soit simple à encoder et à lire. Faire 3 champs différents par numéro n'est pas simple/ergonomique non plus (niveau encodage utilisateur).

Pour l'encodage, je pensais à une validation et l'enregistrement dans ce format:
Code:
32 84 123456
32 4 1234567
33 4 12345678

Et pour l'affichage (traitement PHP):
Code:
+32 84 12 34 56
+32 4 123 45 67
+33 4 12 34 56 78

Qu'en pensez-vous ? Avez vous déjà réfléchi à cette problématique des numéros internationaux ?
 
WRInaute passionné
Oui.... et c'est un vrai casse tête... car chaque pays a sa propre convention d'usage... en plus du code pays + code regional...: la séparation des numeros.

Parfois c'est 2 par 2 (exemple de la France)
Aux USA, on aura encore un truc différent, genre 3 par 3 puis, dans un autre pays, ce sera 2, 3 et 2... etc...

Bref, je suis d'accord, c'est un vrai casse tête...

La solution que j'ai retenu pour ma part c'est:

le code pays: formaté de la façon suivante: +XXX (sans le double zero)
Le code regional (sans le zero) + le reste... je laisse le choix à l'utilisateur de segmenter cette partie à sa convenance...
 
WRInaute accro
Ouaip, c'est même plus compliqué que ça:

- dans un pays donné, tous les numéros n'ont pas forcément la même longueur
- dans un pays donné, le découpage ne se fait pas toujours de la même façon, même pour les numéros d'un même type. Par exemple au Royaume-Uni, le préfixe de Londres et 020, donc on écrit 020 abcd efgh (même si la plupart des gens écrivent ça en fait 0207 abc defg ou encore 0207 abcd efg), mais dans certains villes le préfixe fait 4 chiffres, dans d'autres 5. Pareil en Allemagne, en Suisse si ma mémoire est bonne, etc.
- dans un pays donné, il existe souvent plusieurs classes de numéros (les numéros géographiques, mobiles, et les numéros non géographiques comme les 08 en France par exemple). Chacun a souvent ses propres règles, mais elles ne sont pas toujours fixes. Par exemple en France, un 08 sera généralement écrit 08ab cd ef gh (plutôt que 08 ab cd ef gh comme les autres numéros), voire 08ab cde fgh ou 0 8ab cde fgh [*]
- certains pays autorisent de taper des numéros "locaux" (comme du temps de la numérotation à 6/7 chiffres en France), d'autres uniquement des numéros nationaux entiers
- le préfixe "0" saute dans certains pas, pas dans d'autres (par exemple l'Italie)
- le préfixe n'est pas toujours le même (souvent 0, mais les pays d'Amérique tu Nord et dépendances utilisent le 1).
- certains numéros ne peuvent exister que localement (par exemple les numéros courts en 1xx et 3xxx en France), et ne peuvent pas s'écrire au format international.

Le format généralement (à part pour la dernière règle) le plus pratique est effectivement de stocker au format international (E.164), sans 00 ou + initial, puis de convertir à l'affichage, mais ça exige d'avoir tout un tas de règles pour faire la conversion comme il faut. Et en plus, ça change souvent.

L'autre alternative, c'est de stocker en format code pays + numéro local. Mais là encore, si tu veux pouvoir générer le numéro international, il va falloir avec des règles de conversion spécifiques à chaque pays. Même chose si tu stockes sous forme pays/région/numéro local.

Ah, j'ai failli oublier que les séparateurs ne sont pas toujours les mêmes. En France on utilise normalement l'espace (quelquefois le point), en Allemagne l'indicatif régional est séparé du reste par /, aux US on utiliser des tirets et/ou des parenthèses...

Bref, c'est le bordel. La grande question est de savoir ce que tu veux faire de ces numéros (comment/à qui tu veux les afficher), et accessoirement qui les rentre (à quel format).

Bon courage!

Jacques.

[*] évidemment l'usage consacré en France est 08 ABPQ MCDU et pas 08 abce fghi, mais on ne va pas chipoter...
 
WRInaute accro
jcaron a dit:
La grande question est de savoir ce que tu veux faire de ces numéros (comment/à qui tu veux les afficher), et accessoirement qui les rentre (à quel format).
C'est pour uniformiser les numéros dans un site de petites annonces et un annuaire, donc encodage et affichage pour les visiteurs.
 
WRInaute passionné
Je me rappelle en avoir bien chié (surtout côté validation) de mon côté.
J'avais trouvé comme technique (pour la saisie) une box "pays" (avec US/FR/etc.) qui remplaçait par le +33, +44.
Et après une boite "normale" qui demandait le numéro en format local, après je remplçais le 0 par le country code.
Vu que la correspondance entre "affichage du pays" et country code est dans la base de données, j'avais rajouté un champ "explode" ainsi qu'un "offset".
Ca donnait quelque chose du genre :
+33 (0) 6 25 XX XX XX
Le "offset" me sert à savoir "où" démarre le 06 du reste, et donc à 1. Le explode était à "2" dans ce cas (en France c'est 2/2).
Pour UK j'avais mis un peu différent.

Bon, c'était bien bien chiant à valider, car dès que tu rentres dans la validation de numéro de pays dont tu n'as pas d'exemple...

Voilà pour mon petit retour (moi j'étais surtout bloqué dans la section "validation").
 
WRInaute accro
intéressant se topic, je reco.

quelqu'un à penser au diffèrent href entre tel et call, à savoir que call est utiliser par skype sur pc, et que apparemment sur iPAD c'est tel qui est usité, de même que android ne semble compatible qu'avec tel.

Code:
<a href="tel:+331abcdefgh">01 AB CD EF GH</a>
<a href='skype:+331abcdefgh?call'>01 AB CD EF GH</a>

je me suis résolut à utiliser les deux sur mon site, le format SKYPE compatible en bas et en haut le format en tel:+33 compatible google android et iPAD/iPHONE.
 
WRInaute accro
Merci à tous pour vos réponses, comme je vois c'est une belle problématique pour bcp d'entre nous.

Ça va être compliqué avec le groupement des numéros différent par pays.
En résumé, tous les numéros sont composés de préfixe international + préfixe régional + numéro.

Je pense que je vais opter pour ces 3 informations séparées par un espace, et sans le 0 du préfixe régional (s'il y en a un et si pas obligatoire, cfr Italie), ainsi avec un séparateur connu on peut explode() facilement le numéro pour traitements futurs.
Avec quand même le "+" pour mettre en évidence que c'est le préfixe international:
Code:
+32 84 123456
+32 4 1234567
+33 4 12345678
+1 418 1234567
Enregistrement fort semblable à l'E.164 (juste des espaces):
Number structure for global services: http://en.wikipedia.org/wiki/E.164


Pour les afficher de façon lisible (simple à composer au téléphone), sans respecter les normes de groupement de numéros par pays:
Code:
+32 84 12 34 56
+32 4 123 45 67
+33 4 12 34 56 78
+1 418 123 45 67
Si c'est nombre pair de chiffres: groupement par 2
Si c'est un nombre impair: 1 groupe de 3, le reste par 2
 
WRInaute accro
Je suis retombé sur cette page:
http://en.wikipedia.org/wiki/E.123
Notation for national and international telephone numbers, e-mail addresses and Web addresses is an ITU-T standard for printed representation of telephone numbers, e-mail addresses, and web addresses.
vs
http://en.wikipedia.org/wiki/E.164

Donc si je comprend bien, la norme ITU-T pour l'affichage est plutôt la E.123.
La E.123 correspond à ce que je pensais faire, ils n'indiquent nulle par de normes pour le nombre de chiffre par groupe.
C'est même conseillé de les grouper:
Le bon ordonnancement des chiffres d’un numéro de téléphone est à conseiller pour des
raisons de mémorisation et de présentation orale ou écrite.
Source: http://www.itu.int/rec/T-REC-E.123-200102-I/en
 
Discussions similaires
Haut