numero-uemoa
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.
Metadata
Release files for numero-uemoa 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| numero_uemoa-0.1.0.tar.gz | 12.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| numero_uemoa-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.6 kB
Release files / numero_uemoa-0.1.0.tar.gz
| Download URL | numero_uemoa-0.1.0.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fe04d2e0d96aeaf412ba98f1a947175067829bd4e07678be2a7e8e1521ca8081
|
|
BLAKE2b-256 checksum How to use checksums |
928ec9e4c3f1a00cfe9d785c8e894b4b996557db36bb627b156eb079774a5776
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / numero_uemoa-0.1.0-py3-none-any.whl
| Download URL | numero_uemoa-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
280ca74352e91565f020d40736e18eeef3d0011e118f4a1a9e444ed707771b86
|
|
BLAKE2b-256 checksum How to use checksums |
c90d79c6765d28dc7630572f32bf7dc991cf8d0113f57cf74c6a05c6b13c5fb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for numero-uemoa 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.