Search by

gillesto66 / numero-uemoa

gillesto66

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.

Package info

github.com/Gillesto66/numero-uemoa-php

pkg:composer/gillesto66/numero-uemoa

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-10-20 23:57 UTC

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: true inverse 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+, extensions intl et mbstring).
  • 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.