French phone numbers follow a compact, well-defined national plan regulated by ARCEP (Autorité de Régulation des Communications Électroniques, des Postes et de la Distribution de la Presse). Every subscriber number is exactly 10 digits long in national format, always starting with a zero. The single digit after the leading zero tells you almost everything you need to know about the line: whether it is a geographic fixed line (and which of France’s five calling zones it sits in), a mobile, a freephone service, a premium-rate number, or a VoIP line provided through a broadband subscription.
This validator implements the full ARCEP plan. Paste or type a number in any common format — with spaces, dashes, the French national prefix or the international +33 prefix — and get an instant structured breakdown: service class, geographic region (for 01–05 fixed numbers), surcharge warning (for 08 premium ranges), plus both the canonical national format and the E.164 format ready to copy.
How it works
Step 1 — Normalise. The input is cleaned by removing spaces, dashes, dots, and parentheses. If the number starts with +33 or 0033, the international prefix is replaced with a leading 0, converting it to the 10-digit national form.
Step 2 — Length check. French numbers in national form are always exactly 10 digits. Anything shorter (e.g. a partial entry) or longer (e.g. an accidentally merged country code) is rejected with a clear message.
Step 3 — Prefix lookup. The second digit of the national number is matched against the ARCEP service-class table. The lookup uses longest-prefix matching so that a number like 0800 xxx xxx is identified as “Numéro Vert (freephone)” rather than the more general 08 — special services. Each match returns a service label, a description, the geographic region (for 01–05), and whether the call may incur a surcharge.
Step 4 — Format output. Valid numbers are displayed in the canonical French grouping 0x xx xx xx xx (five groups of two digits) and in E.164 +33x xx xx xx xx for use in international contexts, APIs, or contact databases. Both can be copied with a single click.
Worked example
Imagine you receive the number +33 6 12 34 56 78 on a business card. Paste it in:
- Normalised national:
0612345678 - Length: 10 digits — correct
- Prefix
06matches: Mobile (06) - No surcharge risk
- National format: 06 12 34 56 78
- E.164: +33 6 12 34 56 78
Now try 0 800 100 200 (the freephone number for Direction générale des Finances publiques):
- Normalised:
0800100200 - Prefix
0800matches: Numéro Vert (freephone) - Free from any French landline or mobile
- E.164: +33 800100200
And try 0 899 23 13 13 (a premium Audiotel line):
- Prefix
089matches: Premium rate (0 89x) - Surcharge warning shown — substantial per-minute charge applies
| Number | Type | Cost |
|---|---|---|
| 01 xx xx xx xx | Geographic — Paris | Standard |
| 06 / 07 xx xx xx xx | Mobile | Standard |
| 0800 / 0805 | Freephone | Free |
| 081x | Shared-cost | Local rate |
| 089x | Premium (Audiotel) | High per-minute charge |
| 09 xx xx xx xx | VoIP / internet box | Standard |
Everything runs locally in your browser — no number you type is ever sent to a server.