gillesto66 / numero-uemoa
Valider, normaliser et convertir les numéros de téléphone des 8 pays de l'UEMOA, dont le passage du Bénin à 10 chiffres. Plans officiels datés.
Requires
- php: >=8.1
- ext-intl: *
- ext-mbstring: *
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-10-21 23:28:52 UTC
README
Valider, normaliser et convertir les numéros de téléphone des 8 pays de l'UEMOA — Bénin, Burkina Faso, Côte d'Ivoire, Guinée-Bissau, Mali, Niger, Sénégal, Togo — dont le passage du Bénin de 8 à 10 chiffres (30 novembre 2024) et celui de la Côte d'Ivoire (31 janvier 2021).
Même résultat en TypeScript, Python et PHP : une seule table de données, tirée des plans de numérotage que chaque régulateur a communiqués à l'UIT, avec la date et la source de chaque pays.
import { analyser } from 'numero-uemoa'; const n = analyser('97 00 00 00', { pays: 'BJ' }); n.valide; // false n.motif; // 'ancien_format' n.converti?.e164; // '+2290197000000' n.converti?.lienWhatsApp; // 'https://wa.me/2290197000000' n.converti?.operateur; // 'MTN' (opérateur d'attribution de la série)
from numero_uemoa import analyser, normaliser analyser("+229 01 40 12 34 56").marque # 'Celtiis' normaliser("97 00 00 00", pays="BJ") # '+2290197000000'
use Numero\Numero; Numero::analyser('+225 20344373')->converti?->e164; // '+2252720344373'
Ce que la bibliothèque renvoie
| Champ | Contenu |
|---|---|
valide |
Conforme au plan officiel (série attribuée, ou réservée hors mode strict) |
motif |
Pourquoi ce n'est pas valide : vide, caracteres, pays_requis, pays_non_couvert, longueur, ancien_format, pas_encore_en_vigueur, serie_reservee, serie_inconnue (messages en français fournis) |
converti |
Proposition de nouveau numéro pour un ancien format : jamais appliquée d'office |
e164, international, format |
+2290197000000, +229 01 97 00 00 00, 01 97 00 00 00 |
type, operateur, marque |
mobile / fixe / service ; opérateur d'attribution de la série (voir portabilite) |
lienTel, lienWhatsApp, masque |
tel:+229…, https://wa.me/229…, +229 01 97 ** ** 00 |
serie |
attribuee, reservee (prévue par le plan, sans opérateur), inconnue (absente du plan publié) |
source, portabilite |
Date du plan officiel utilisé ; date d'ouverture de la portabilité des numéros |
Options : pays (pour un numéro écrit sans indicatif), date (évaluer à une autre date : avant la bascule, l'ancien numéro béninois est le bon), strict (refuser les séries réservées).
Les choix, et pourquoi
- La conversion est proposée, jamais imposée. Un numéro étranger saisi dans un répertoire béninois n'est pas « converti » : il est reconnu comme étranger.
- « Série inconnue » ne veut pas dire « faux ». Les plans publiés ont parfois plusieurs années (Mali : 2018, Togo : 2021). Un numéro dans une série absente du plan est signalé avec la date du plan, pour que vous décidiez.
- Séries réservées acceptées par défaut. Refuser le vrai numéro d'un client coûte plus cher qu'accepter un numéro d'une série encore libre : la mesure l'a montré (voir
docs/mesures.md).strict: trueinverse ce choix. - L'opérateur est celui d'attribution. Avec la portabilité (Bénin depuis 2018, Togo depuis 2024), un numéro a pu changer d'opérateur.
- Couverture régionale, pas mondiale : 2,9 Ko compressés, zéro dépendance.
Mesuré (détail dans docs/mesures.md)
- 52 vecteurs écrits à la main depuis les documents officiels (exemples cités, numéros de contact des régulateurs) : 52/52 dans les trois langages.
- 1 200 vecteurs croisés (toutes les séries, toutes les règles de migration, saisies abîmées) : sorties identiques en TypeScript, Python et PHP.
- 2 986 octets minifiés et compressés (TypeScript), contre 29 220 pour libphonenumber-js/min et 49 247 pour /max.
- libphonenumber-js ne convertit pas les anciens numéros béninois et ivoiriens : il les déclare invalides.
Installer
- npm :
numero-uemoa· PyPI :numero-uemoa· Packagist :gillesto66/numero-uemoa(PHP 8.1+, extensionsintletmbstring). - Convertir un fichier :
python -m numero_uemoa contacts.csv --colonne telephone --pays BJ.
Sources
Les huit plans officiels, leur date et leur adresse : docs/sources.md. Mettre à jour la table quand un plan change : docs/METTRE-A-JOUR.md.
Licence MIT — Gilles MEDENOU.