# French phone number format: +33, 06 and 07 mobiles, validation and rules

> French phone number format: +33 plus 9 digits, 06/07 mobiles, Arcep prefixes, tested validation code, RIO porting, opt-in sales calls and SMS consent.

Canonical: https://mobilevalidate.com/blog/france-phone-number-format · Last updated: 2026-11-03

![A wide card shows +33 and a ten-digit number as five pairs led by 06/07 above a dashed fiction row; below, a caller-authentication shield, a donut of mobile blocks by holder with a RIO pill, and a consent calendar.](https://mobilevalidate.com/images/blog/france-phone-number-format.svg)

*French numbers: five pairs after +33, block holders aren't networks, and sales calls now need consent.*


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-11-03 · Category: Guides · Tags: France, Phone validation, E.164, MNP, SMS, WhatsApp, Compliance

French phone numbers use the country code +33 and have 10 digits when written at home, always starting with 0. A mobile number starts with 06 or 07, so `06 XX XX XX XX` in France becomes `+33 6 XX XX XX XX` from abroad (E.164: `+336XXXXXXXX`), with nine digits after +33. Landlines start 01 to 05, VoIP and other non-geographic numbers 09, and special-rate numbers 08. The prefix shows which operator received the block, but numbers have been portable since 2003, so it doesn't prove the current network.

This guide is part of our [phone numbers by country](/blog/phone-numbers-by-country) series. The tables come from libphonenumber's metadata, the numbering plan and number-block list published by Arcep (France's telecoms regulator), our [MNP atlas](/datasets/mnp-atlas-2026) and our public catalog. Example numbers are masked with X, taken from the ranges Arcep reserves for fiction, or are libphonenumber's own example number. We read the Arcep decisions, the laws on Légifrance and the CNIL's guidance on 2026-11-03; most are in French only. This is a summary, not legal advice.

## What does a French phone number look like?

A French number is 10 digits written in five pairs: `0Z AB PQ MC DU`. The first `0` is the trunk prefix you dial inside France. The next digit, `Z`, tells you the kind of number:

| First digits (national) | International | Type |
|---|---|---|
| `01`, `02`, `03`, `04`, `05` | `+33 1` to `+33 5` | Landline (formerly by region: Paris area, north-west, north-east, south-east, south-west) |
| `06`, `07` | `+33 6`, `+33 7` | Mobile |
| `08` | `+33 8` | Special numbers: freephone (`0800` to `0805`) and shared or premium rates |
| `09` | `+33 9` | Non-geographic ("polyvalent") numbers, mostly internet-box VoIP lines |

From abroad, drop the `0` and add `+33`. People write `+33 (0)6 XX XX XX XX` as a reminder to dial the 0 at home; strip the bracket and the 0 before you store it. Dots are a common separator too (`06.XX.XX.XX.XX`).

<!-- country-data:FR:format:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (libphonenumber metadata 9.0.39 via libphonenumber-js 1.13.13); edit the script, not this table -->

| Item | Value |
|---|---|
| Country calling code | `+33` |
| International call prefix (dialling out) | `00` |
| Trunk prefix (dialling at home) | `0` |
| Mobile: digits after +33 | 9 |
| Fixed line: digits after +33 | 9 |
| Toll-free: digits after +33 | 9 |
| Premium rate: digits after +33 | 9 |
| Shared cost: digits after +33 | 9 |
| VoIP: digits after +33 | 9 |
| Universal access (UAN): digits after +33 | 9 |
| Mobile, national format (masked) | `06 1X XX XX XX` |
| Mobile, international (masked) | `+33 6 1X XX XX XX` |
| Mobile, E.164 (masked) | `+3361XXXXXXX` |
| Fixed line, national format (masked) | `01 0X XX XX XX` |
| Fixed line, international (masked) | `+33 1 0X XX XX XX` |
| Fixed line, E.164 (masked) | `+3310XXXXXXX` |
<!-- country-data:FR:format:end -->

Every type has nine digits after `+33`, so length alone can't tell a mobile from a landline; the first digit does. The only long numbers are the machine-to-machine (M2M) range `0700`, which has 14 digits in mainland France (Arcep numbering plan, section 2.3.5). They are for devices, not people, and libphonenumber doesn't accept them as French mobiles.

### Is Guadeloupe or Réunion +33?

No. The overseas departments use the French numbering plan but have their own country codes ([Arcep numbering plan](https://www.arcep.fr/uploads/tx_gsavis/25-2215.pdf), section 2.3.4):

| Territory | Country code | Mobile blocks (national format) |
|---|---|---|
| Guadeloupe, Saint-Martin, Saint-Barthélemy | `+590` | `0690`, `0691` |
| French Guiana | `+594` | `0694` |
| Martinique | `+596` | `0696`, `0697` |
| Réunion | `+262` | `0692`, `0693` |
| Mayotte | `+262` | `06390` to `06398`, `063990` to `063997`, `063999` |
| Saint-Pierre-and-Miquelon | `+508` | `070840` to `070845`, `070850` to `070855` |

A customer in Guadeloupe writes `0690 XX XX XX`, which looks French. In E.164 it is `+590 690 XX XX XX`, not `+33 690 …`. If you serve overseas customers, ask for the territory, or parse with its region code (`GP`, `GF`, `MQ`, `RE`, `YT`, `PM`).

## Which prefixes are mobile numbers?

In mainland France, Arcep's plan lists these mobile roots: `061`, `062`, `064`, `066` to `068`, `073` to `078`, plus `0601` to `0609`, `0630` to `0638`, `0650` to `0652`, `0656` to `0659`, `0695`, `0698` and `0699`. The `079` range is reserved for future overseas needs. For each two-digit block, the generator counted every nine-digit number that libphonenumber's mobile pattern for `FR` accepts:

<!-- country-data:FR:prefixes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (exact count over the mobile pattern, libphonenumber metadata 9.0.39); edit the script, not this table -->

| National prefix | International | Share of the block that is mobile (9-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `060` | `+33 60` | 100% | — |
| `061` | `+33 61` | 100% | — |
| `062` | `+33 62` | 100% | — |
| `063` | `+33 63` | 90.0% | not mobile: 0639 |
| `064` | `+33 64` | 100% | — |
| `065` | `+33 65` | 100% | — |
| `066` | `+33 66` | 100% | — |
| `067` | `+33 67` | 100% | — |
| `068` | `+33 68` | 100% | — |
| `069` | `+33 69` | 30.0% | not mobile: 0690–0694, 0696, 0697 |
| `073` | `+33 73` | 100% | — |
| `074` | `+33 74` | 100% | — |
| `075` | `+33 75` | 100% | — |
| `076` | `+33 76` | 100% | — |
| `077` | `+33 77` | 100% | — |
| `078` | `+33 78` | 100% | — |
| `079` | `+33 79` | 100% | — |
<!-- country-data:FR:prefixes:end -->

The gaps are the overseas blocks from the table above: `0639` is Mayotte, and `0690` to `0694`, `0696` and `0697` belong to the Caribbean departments and French Guiana. `070`, `071` and `072` are not mobile at all (`0700` is the M2M range). Arcep's plan reserves `06` and `07` for interpersonal services: the number must belong to one person who can make and receive calls and messages ([Arcep, 5 September 2022](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/plan-de-numerotation-050922.html)). Machines, alarms and platforms have to use other ranges.

### Which operator holds a 06 or 07 block?

Arcep allocates numbers in blocks and publishes every allocation as open data ([MAJNUM file](https://www.data.gouv.fr/fr/datasets/ressources-en-numerotation-telephonique/), matched to operator names with the [operator code list](https://www.data.gouv.fr/fr/datasets/identifiants-de-communications-electroniques/)). We summed the ten-digit `06` and `07` blocks allocated in mainland France in the file we downloaded on 2026-11-03 (latest allocation dated 2026-10-16). In total, 135.6 million mobile numbers are allocated:

| Holder in Arcep's list | Share of allocated 06/07 numbers | Blocks it holds most of |
|---|---:|---|
| Orange | 31.9% | All of `067` and `068`; most of `063`, `064` and `078` |
| SFR | 24.7% | All of `061`; most of `062`; the largest share of `060` and `077` |
| Bouygues Telecom | 18.9% | Most of `066`, `076` and `0695`/`0698`/`0699` |
| Free Mobile | 9.9% | Large shares of `074`, `076` and `078` |
| Lycamobile | 3.0% | Part of `075` |
| Lebara | 2.2% | Part of `075` |
| Syma | 2.0% | Part of `077` |
| La Poste Telecom | 1.9% | Parts of `064` and `074` |
| 103 other operators | 5.4% | Smaller blocks, mostly in `060`, `065`, `074` and `075` |

`073` and `079` have no mainland allocations in the file. Two things follow. First, the "valid" mobile pattern in libphonenumber is wider than what is in use, so a valid `073` number is possible under the plan but not yet issued. Second, the block holder is only a starting point: blocks range from 1 million numbers down to 10,000 or even 1,000, so newer ranges are split between many operators, and any number can be ported. Arcep's own lookup tool ([identify an operator by its number](https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/identifier-un-operateur-par-un-numero.html)) answers the same question one number at a time and doesn't follow porting either.

## What do 01 to 05, 09 and 08 numbers mean today?

Landline numbers kept their regional first digit: `01` Île-de-France, `02` north-west, `03` north-east, `04` south-east and `05` south-west, plus `0262`, `0590`, `0594` and `0596` overseas. But since 1 January 2023 the "geographic" category no longer exists in Arcep's plan. Most `01` to `05` numbers became polyvalent numbers that can be given to a subscriber anywhere in mainland France, and a customer who moves can keep the number ([Arcep decision 2022-1583](https://www.arcep.fr/uploads/tx_gsavis/22-1583.pdf), sections 2.3.3 and 2.3.6; [Arcep portability page](https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation/portabilite-numeros-telephone-fixes-et-mobiles.html)). A `04` number is no longer proof that someone lives in the south-east.

`09` numbers are polyvalent too, and libphonenumber types most of them as `VOIP`: they are the numbers that come with internet boxes and IP phone services. Two sub-ranges are special:

- **`0937` and `0938`** are for conversations between a mobile user and a "technical platform", such as a shop chatting with a customer or a delivery driver or ride-hailing app masking both parties' numbers.
- **`0948` and `0949`** are verified polyvalent numbers (see below).

`08` numbers are special services: freephone numbers start `0800` to `0805`, and the rest of `08` carries shared or premium rates. None of these should be accepted as a personal sign-up number.

## What are 0162, 0163, 0270 and 0271 numbers?

They are **verified polyvalent numbers** (numéros polyvalents vérifiés), the ranges that automated calling and messaging systems may show as caller ID. Arcep's plan reserves 12 of them in mainland France: `0162`, `0163`, `0270`, `0271`, `0377`, `0378`, `0424`, `0425`, `0568`, `0569`, `0948` and `0949`. Overseas, the ranges are `09475` and `05987` (Guadeloupe, Saint-Martin, Saint-Barthélemy), `09476` and `05988` (French Guiana), `09477` and `05989` (Martinique), and `09478` and `09479` (Mayotte and Réunion) ([Arcep numbering plan](https://www.arcep.fr/uploads/tx_gsavis/25-2215.pdf), section 2.3.7).

The rule, in force since 1 January 2023, works in two parts ([Arcep decision 2022-1583](https://www.arcep.fr/uploads/tx_gsavis/22-1583.pdf), sections 2.3.2 f, 2.3.4 f and 2.3.7):

- **Automated systems can't use mobile or most landline numbers as caller ID.** Mobile numbers have no exception at all. Other landline-style numbers have narrow exceptions for low-volume systems, such as one that calls five numbers or fewer in 30 days.
- **Verified numbers must be authorised.** The operator running a `0162`-type number must be able to show that the number's holder explicitly agreed to its use as caller ID in each call or message. If it can't, the call or message is not allowed, even with the caller ID hidden.

In practice, a French call centre's dialler, an automated reminder line or a robocall shows one of these 12 prefixes. People in France have learned to recognise them as sales or automated calls. For you, the useful consequences are: don't send automated SMS or calls from a `06` or `07` number, and don't treat a `0162` number as a customer's personal line.

Since 1 January 2026, the plan also has a category of numbers for automated calls and messages of general interest, such as public alerts. They can only be given to bodies named in a joint ministerial order ([Arcep, 2 December 2025](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/plan-de-numerotation-021225.html)).

## How do I validate a French number in code?

Use a libphonenumber port with full metadata and the default region `FR`, and keep only numbers typed as mobile. Pass the region of an overseas department when you expect one.

**Python** (`pip install phonenumbers`):

```python
import phonenumbers
from phonenumbers import PhoneNumberType


def normalize_fr(raw: str, region: str = "FR") -> str | None:
    """E.164 for a French mobile number (06, 07), or None.
    For an overseas department pass its own region code, e.g. "GP" or "RE"."""
    try:
        n = phonenumbers.parse(raw, region)
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != region
            or phonenumbers.number_type(n) != PhoneNumberType.MOBILE):
        return None
    return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)


for raw in ["06 12 34 56 78", "+33 (0)6 12 34 56 78", "0033 6 12 34 56 78", "06.12.34.56.78",
            "01 99 00 12 34", "06 39 98 12 34", "0690 12 34 56"]:
    print(f"{raw!r:24} -> {normalize_fr(raw)}")
print(f"{'0690 12 34 56 (GP)':24} -> {normalize_fr('0690 12 34 56', 'GP')}")
```

**JavaScript** (`npm install libphonenumber-js`):

```js
import { parsePhoneNumberFromString } from "libphonenumber-js/max";

/** "06 …", "+33 (0)6 …", "0033 …" → E.164 for a French mobile number, or null.
 *  For an overseas department pass its own region code, e.g. "GP" or "RE". */
export function normalizeFr(raw, region = "FR") {
  const phone = parsePhoneNumberFromString(String(raw), region);
  return phone?.isValid() && phone.country === region && phone.getType() === "MOBILE" ? phone.number : null;
}

for (const raw of ["06 12 34 56 78", "+33 (0)6 12 34 56 78", "0033 6 12 34 56 78", "06.12.34.56.78",
                   "01 99 00 12 34", "06 39 98 12 34", "0690 12 34 56"]) {
  console.log(JSON.stringify(raw).padEnd(24), "->", normalizeFr(raw));
}
console.log("0690 12 34 56 (GP)".padEnd(24), "->", normalizeFr("0690 12 34 56", "GP"));
```

We ran both on 2026-11-03 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). `06 12 34 56 78` is libphonenumber's own example number; the others come from Arcep's fiction ranges or are overseas test inputs. Both printed the same results; Python prints single quotes and `None`, JavaScript double quotes and `null`:

```text
'06 12 34 56 78'         -> +33612345678
'+33 (0)6 12 34 56 78'   -> +33612345678
'0033 6 12 34 56 78'     -> +33612345678
'06.12.34.56.78'         -> +33612345678
'01 99 00 12 34'         -> None
'06 39 98 12 34'         -> None
'0690 12 34 56'          -> None
0690 12 34 56 (GP)       -> +590690123456
```

The `+33 (0)` form and the dots parse correctly in both libraries. The Paris fiction number is a valid landline, so it's dropped. The mobile-looking fiction number `06 39 98 …` is rejected, because `0639` is Mayotte's block under `+262` and the fiction block is never assigned. `0690 …` fails as a mainland number and passes as `+590` when you parse it for Guadeloupe.

The generated test table runs the same idea over masked inputs. The shape regex column tests the pattern most tutorials give, after spaces, dots, dashes and brackets are removed:

<!-- country-data:FR:tests:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (libphonenumber-js 1.13.13, region FR); edit the script, not this table -->

| # | Case | Input (masked) | Shape regex `^(?:\+33\|0033\|0)?[67]\d{8}$` | libphonenumber (`FR`) |
|---|---|---|---|---|
| 1 | National, with trunk prefix | `06 1X XX XX XX` | passes | valid, `MOBILE` |
| 2 | International, with spaces | `+33 6 1X XX XX XX` | passes | valid, `MOBILE` |
| 3 | International dialling prefix 00 | `0033 6 1X XX XX XX` | passes | valid, `MOBILE` |
| 4 | E.164 | `+3361XXXXXXX` | passes | valid, `MOBILE` |
| 5 | Dashes and brackets | `(06) 1X-XX-XX-XX` | passes | valid, `MOBILE` |
| 6 | One digit short | `061XXXXXX` | fails | invalid |
| 7 | One digit too many | `061XXXXXXXX` | fails | invalid |
| 8 | Mobile shape, unused block 070 | `070XXXXXXX` | passes | invalid |
| 9 | Fixed line | `01 0X XX XX XX` | fails | valid, `FIXED_LINE` |
| 10 | Toll-free range | `0 800 XX XX XX` | fails | valid, `TOLL_FREE` |
<!-- country-data:FR:tests:end -->

Row 8 is the French trap: `070` has the shape of a mobile number and passes the regex, but it isn't a mobile range. The regex also passes `0690` and `0639` numbers as mainland mobiles. Our [E.164 developer guide](/blog/e164-phone-number-format-guide-for-developers) and the post on [why an E.164 regex is not enough](/blog/e164-regex-is-not-enough) cover the general problem.

### Which numbers can I use in tests and examples?

Use the fiction ranges in Arcep's numbering plan ("numbers for audiovisual works"). Each is a block of 10,000 numbers that Arcep never allocates to an operator; the 2022 version of the plan added that they can't be given to a subscriber, called or shown as a caller ID:

| Zone | Range |
|---|---|
| Île-de-France | `01 99 00 00 00` to `01 99 00 99 99` |
| North-west | `02 61 91 00 00` to `02 61 91 99 99` |
| North-east | `03 53 01 00 00` to `03 53 01 99 99` |
| South-east | `04 65 71 00 00` to `04 65 71 99 99` |
| South-west | `05 36 49 00 00` to `05 36 49 99 99` |
| Mobile style | `06 39 98 00 00` to `06 39 98 99 99` |

The five landline blocks pass libphonenumber as `FIXED_LINE`, which makes them good parser test data. The mobile-style block fails validation for both `FR` and Mayotte (`YT`), so it can't stand in for a valid mobile in a unit test. Use the library's example number for that, and never a real customer's number. None of these numbers answer a live lookup.

## Does number portability change the carrier?

Yes. Mobile number portability (MNP) opened in France on 1 July 2003. Porting within 10 days began in mainland France on 21 May 2007, and a simpler, faster procedure followed on 7 November 2011 ([Arcep portability page](https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation/portabilite-numeros-telephone-fixes-et-mobiles.html)). How it works today:

- **Get the RIO.** The relevé d'identité opérateur is a unique 12-character code. Call **3179** from the mobile: the call is free, the number is the same on every network, it works around the clock, and the code arrives by voice and then by SMS ([Service-Public.fr](https://www.service-public.gouv.fr/particuliers/vosdroits/F22479)). Since 1 December 2023, every end user can get a RIO free of charge, for any type of number.
- **One working day.** The porting delay set by law is one working day, subject to the line being available, unless the subscriber asks for a later date (Arcep).
- **The new operator does the work.** You give it your number and RIO; it asks the old operator to port. The port ends the old contract at the same time, but early-termination fees in that contract still apply. You can still port up to 40 days after cancelling a line.
- **Compensation.** If the port goes wrong or is late, the subscriber can ask the operator for compensation (Service-Public.fr).

The France row of our MNP atlas:

<!-- country-data:FR:mnp:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (row from content/datasets/mnp-atlas-2026); edit the script, not this table -->

| Item | Value |
|---|---|
| Mobile number portability | Yes |
| Mobile porting since | 2003-07-01 |
| Maximum porting time | 1 working day |
| Governing rule | CPCE L44 / D406-18; Arcep decisions; EECC Art. 106 |
| Published porting volume | none published |
| Source | [arcep.fr](https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation/portabilite-numeros-telephone-fixes-et-mobiles.html), [eur-lex.europa.eu](https://eur-lex.europa.eu/eli/dir/2018/1972/oj) |
| Checked | 2026-11-03 |
<!-- country-data:FR:mnp:end -->

The atlas row gives the launch year only. Arcep's page dates it to 1 July 2003. Our [MNP atlas](/blog/mobile-number-portability-atlas) compares France with other countries. With four network operators (Orange, SFR, Bouygues Telecom and Free Mobile) and dozens of virtual operators on their networks, the block holder is a weak guess. For SMS routing, pricing or fraud rules, look up the current network per number.

Arcep also tightened the rules for reused numbers. Since 1 January 2026, a number whose line was cancelled by the operator, for example when a copper line closes, can't be reassigned for at least 45 days, so the former user has time to recover it ([Arcep, 2 December 2025](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/plan-de-numerotation-021225.html)). For a business, that is a reminder that a number can change hands: check numbers again before you reuse an old list.

## What are the rules for sales calls, SMS and caller ID?

These summarise the laws, decisions and guidance as we read them on 2026-11-03. Not legal advice; ask counsel how they apply to you.

### Sales calls to consumers need consent (since 11 August 2026)

France switched from opt-out to opt-in for telephone prospecting. Article 13 of Law no. 2025-594 of 30 June 2025 rewrote article L223-1 of the Consumer Code, with effect from 11 August 2026 ([Law 2025-594, art. 13](https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000051824325); [L223-1](https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000051830285/2026-08-11)):

- **Prior consent.** It is forbidden to canvass by phone a consumer who has not consented beforehand. Consent means a free, specific, informed, unambiguous and revocable expression of will, and the business must prove it.
- **Existing contracts.** The ban doesn't apply to calls about a contract in progress and its subject. A call about a different product is not covered by that exception.
- **Banned sectors.** Phone canvassing for home renovation for energy savings, renewable energy or adapting homes for older or disabled people is banned outright, except within a contract in progress.
- **Void contracts.** A contract concluded after an unlawful call is void, and a business that benefits from unlawful calls is presumed responsible.

Decree no. 2026-662 of 23 July 2026 sets the details, also from 11 August 2026 ([Decree 2026-662](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000054483939)):

- Consent needs a clear positive act. A pre-written statement or simply continuing to browse a website doesn't count.
- The request must name the business, the goods or services, the period of consent and how to withdraw. Consent lasts **at most one year** and can't renew tacitly.
- The business keeps a digital record of the consent, with its date and time, for **three years**, and gives the consumer a free copy on request.
- Withdrawal must be no harder than giving consent, and can be oral.

The days and hours from the 2022 rules still apply: calls only on weekdays that aren't public holidays, from 10:00 to 13:00 and 14:00 to 20:00 in the consumer's time zone, and no more than four calls to the same consumer in 30 days (article D223-9 of the Consumer Code, in its version in force since 11 August 2026; [French Business Law translation](https://french-business-law.com/french-legislation-art/article-d223-9-of-the-french-consumer-code)).

### What happened to Bloctel?

Bloctel was France's opposition list: since 2016, consumers could register their numbers, and businesses had to remove registered numbers from their call lists. Under opt-in, a list of people who refuse calls has no role, and the service stopped applying on 11 August 2026 ([Blog du Modérateur, 2026](https://www.blogdumoderateur.com/demarchage-telephonique-fin-bloctel-11-aout/); [bloctel.gouv.fr](https://www.bloctel.gouv.fr/)). If your process still "cleans against Bloctel", replace that step with a consent record per number.

### Marketing SMS need consent too (CPCE L34-5)

SMS follows a different law. Article L34-5 of the Postal and Electronic Communications Code (CPCE) bans direct marketing by automated systems, fax and electronic mail to a natural person who has not consented beforehand ([L34-5](https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042155961)). The ePrivacy Directive defines electronic mail broadly enough to cover SMS ([Directive 2002/58/EC](https://eur-lex.europa.eu/eli/dir/2002/58/oj), Art. 2(h)). The CNIL's guidance, dated 10 June 2026, explains how it applies ([CNIL](https://www.cnil.fr/fr/la-prospection-commerciale-par-courrier-electronique-sms-mms-et-automate-dappel)):

- **Individuals (B2C):** consent before the first message. It must be free, specific, informed and unambiguous, given by a positive action: a pre-ticked box or accepting general terms is not enough.
- **Existing customers:** you may market your own similar products or services to a customer who bought from you and was able to refuse when the number was collected. Creating an online account without a purchase doesn't qualify.
- **Professionals (B2B):** marketing related to the person's job can rely on legitimate interest, if they are informed and can object.
- **Every message** must identify the sender and give a simple, free way to refuse further messages.

The CNIL tells consumers that replying "STOP" works for sender numbers of five digits starting with 3, 4, 5, 6, 7 or 8, and that unwanted SMS can be reported to the 33700 service ([CNIL](https://www.cnil.fr/fr/plainte/telephonie/ne-plus-recevoir-de-sms-publicitaires)). If you send from a short code, process STOP replies; if you send from an alphanumeric sender ID, put a working opt-out in the text.

One court ruling to note: on 25 June 2026 the Conseil constitutionnel found that L34-5 let three authorities (the CNIL, the consumer authority and Arcep) punish the same breach, which breaches the principle that penalties must be necessary. It struck the three enforcement paragraphs, with effect from 31 October 2027; until then, no authority may pursue facts another one is already handling or has already sanctioned ([Decision 2026-1210 QPC](https://www.conseil-constitutionnel.fr/decision/2026/20261210QPC.htm)). The consent rule itself is unchanged.

### Caller authentication (MAN) and masked calls from abroad

France's number authentication mechanism (mécanisme d'authentification des numéros, MAN) is its version of STIR/SHAKEN. The 2020 "Naegelen" law on telephone canvassing added it to article L44 of the CPCE, and the obligations took effect on 25 July 2023. Arcep says the progressive rollout began in October 2024 ([Arcep, 29 January 2026](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/protection-des-consommateurs-290126.html)). How it works ([Arcep operator guide](https://www.arcep.fr/mes-demarches-et-services/acteurs-regules/operateurs-telecoms/fiches-pratiques/authentification-numeros-telephone-fixe-ou-mobile-que-faire-en-tant-que-operateur-telephonique.html)):

- The originating operator signs each call and message with a French number and vouches for the caller's right to use it. Attestation level A means the number was verified; B and C don't meet the legal requirement.
- Transit and terminating operators must pass the signature on unchanged and **cut off** calls whose number can't be authenticated, unless the caller ID is hidden.
- Since 1 January 2026, a call arriving from abroad with a French mobile number (`06` or `07`) that can't be authenticated is **masked** instead of cut off (Saint-Martin: from 1 January 2028). Calls from abroad showing a French landline number (`01` to `05`, `09`) without authentication are still cut off.
- Also since 1 January 2026, operators must list in each contract the numbers a customer may show as caller ID, and technically limit calls to that list ([Arcep decision 2025-2215](https://www.arcep.fr/uploads/tx_gsavis/25-2215.pdf)).

Spoofing hasn't stopped: Arcep counted more than 19,000 identity-spoofing reports on its "J'alerte l'Arcep" platform in 2025, up from 531 in 2023, and opened an investigation into call routes on 29 January 2026. For a voice OTP placed from outside France, expect the French number you show to be masked or the call blocked. Use a number your provider can authenticate in France, or send the code by SMS. Our guide to [STIR/SHAKEN attestation levels](/blog/stir-shaken-attestation-levels) explains the A, B and C levels.

### Personal data (GDPR)

A phone number linked to a person is personal data under the GDPR ([Regulation (EU) 2016/679](https://eur-lex.europa.eu/eli/reg/2016/679/oj)). Checking a customer's number, for reachability or WhatsApp registration, needs a lawful basis under Art. 6, such as a contract or a legitimate interest you have weighed, and people can object to direct marketing at any time under Art. 21. Our posts on [whether a phone number is personal data](/blog/is-a-phone-number-personal-data-gdpr) and on [consent for WhatsApp checks](/blog/whatsapp-number-checks-consent-and-law) give the baseline: your own customers, a stated purpose, minimal data and honoured objections.

## Which messaging apps and channels reach people?

SMS reaches every active French mobile. We didn't find a primary source that measures messaging-app use in France in a way we can verify for this guide, so we don't quote shares. The practical answer is to measure your own opted-in customers: check which apps they are registered on, route each person to the channel they use, and keep SMS as the fallback.

### How do I check WhatsApp registration for a French customer list?

Normalise every row first, then run one check per number. A check tells you whether a number is registered at the time of the check. It can't tell you whether the person wants your messages:

| Answer | What it means | What to do |
|---|---|---|
| `registered: true` | The number has a WhatsApp account at `checked_at` | Offer WhatsApp to customers who opted in to it |
| `registered: false` | No account at `checked_at` | Use SMS or another channel |
| `unknown` | No conclusive answer (not billed) | Keep the current channel; retry later |
| `invalid_number` | Failed format validation (not billed) | Fix the data at the source |

For lists, use a [bulk job](/docs/bulk-jobs). Upload a CSV with numbers written the French way (`06 XX XX XX XX`, `+33 (0)6 …` and dots also work) and `default_country=FR`:

```bash title="Bulk WhatsApp and live status check for a customer CSV"
curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -F file=@customers.csv -F checks=whatsapp,hlr -F default_country=FR
```

Send the same body to `POST /v1/jobs/estimate` first: it is free and shows the maximum cost before anything runs. Rows from overseas departments need their own country code in the file, or a separate job with `default_country=GP`, `RE` and so on.

## What changed recently?

The rows for `FR` and `+33` in our [numbering-plan changes dataset](/datasets/numbering-plan-changes-2019-2026), built from libphonenumber's release notes:

<!-- country-data:FR:changes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (rows of content/datasets/numbering-plan-changes-2019-2026); edit the script, not this table -->

| Change named in the release notes (2019-01-08 to 2026-09-23) | Releases |
|---|---:|
| Original-carrier prefix data | 18 |
| Numbering-plan metadata (validation, lengths, types) | 9 |
| Short numbers | 5 |
| Geocoding (area names) | 3 |
| All | 35 |

Latest numbering-plan updates for `FR`: 2024-08-07 (v8.13.43), 2024-01-10 (v8.13.28), 2023-07-19 (v8.13.17), 2023-02-23 (v8.13.7), 2022-04-19 (v8.12.47).
<!-- country-data:FR:changes:end -->

France's validation metadata has been stable since August 2024; most library releases touched carrier names, not number rules. The regulatory changes matter more:

| Date | Change |
|---|---|
| 1 January 2023 | Geographic numbers abolished as a category; automated systems can't show mobile numbers as caller ID; verified ranges `0162` … `0949` open |
| 1 July 2023 | Arcep allocates new blocks of 1,000 numbers instead of 10,000 |
| 25 July 2023 | Number authentication (MAN) obligations take effect; rollout from October 2024 |
| 1 December 2023 | Free RIO for every end user and number type |
| 1 January 2026 | Unauthenticated calls from abroad with French mobile numbers are masked; caller-ID lists in contracts; 45-day hold before reusing cancelled numbers |
| 25 June 2026 | Conseil constitutionnel strikes the three L34-5 enforcement paragraphs, from 31 October 2027 |
| 11 August 2026 | Opt-in for sales calls to consumers; Bloctel no longer applies |

## What can MobileValidate check for French numbers?

Generated from our public catalog:

<!-- country-data:FR:coverage:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (public catalog https://api.mobilevalidate.com/v1/services, fetched 2026-11-03); edit the script, not this table -->

Catalog data as of 2026-11-03.

| Check | Accepts France numbers | Notes |
|---|---|---|
| Format and country (every lookup) | Yes | Each number is parsed first; an invalid number returns `invalid_number` and is never billed. |
| Carrier lookup (beta) | Yes | Line type and current network where data exists; no data means `unknown`, not billed. Real time and bulk. |
| US/CA carrier lookup (premium) | No (US, CA only) | Answers `unsupported_country` for other countries, not billed. |
| Live network status (HLR) | Yes | Live reachability, porting, roaming (true or false) and current network; `unknown` is free. Real time and bulk. |
| Number portability (MNP) | Yes | Ported or not ported, and the current network code; `unknown` is free. Real time and bulk. |
| Spam reputation | Limited access | All countries except sanctioned ones; report coverage is strongest in North America and Europe. |
| Messaging apps | Yes: WhatsApp, Telegram, Viber*, Signal*, iMessage*, RCS*, LINE*, Zalo*, Botim*, Facebook Messenger* | Registered, not registered or unknown; unknown is free. |
| Social networks | Yes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat* | Not for France numbers: LinkedIn (US, IN only). |
| Online accounts (Apple, Amazon, Microsoft, Netflix) | Yes: Apple, Amazon, Microsoft, Netflix | Registered, not registered or unknown; unknown is free. |

\* bulk jobs only. The live list is at [`GET /v1/services`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:FR:coverage:end -->

A lookup returns network and registration facts. It never returns a subscriber's name or address, and we don't offer "number details" searches.

How to start without paying:

- **Free test key.** [Get a test key](/get-test-key): it never touches a real network and returns fixed answers for reserved test numbers, so you can build every branch first ([test mode](/docs/test-mode)).
- **Five real checks.** Every live account can run 5 phone numbers and 5 e-mail addresses through the real-time checks for free on the dashboard's Try it page.
- **Free estimate.** `POST /v1/jobs/estimate` shows the maximum cost of a bulk file before anything runs.

To get a live account, [request access](/request-access). Viber and Zalo checks are bulk-only for now, as the asterisks in the table show. Prices are on the [pricing](/pricing) page, which also lists the bonus on larger top-ups.

Because the `06` or `07` prefix shows only the block holder, the useful French lookup is the current network. An [HLR lookup](/services/hlr-lookup) gives live reachability, porting and the current network code in one call; an [MNP lookup](/services/mnp-lookup) gives ported or not ported and the current network. Here is a small flow for a customer list that adds WhatsApp registration. It uses the public sandbox key `mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym` and our [test values](/docs/test-values). The sandbox accepts only those UK drama numbers, so the example uses them. With a live key, pass the output of `normalize_fr()`.

```python title="fr_reach.py"
import os

import requests  # pip install requests

API = "https://api.mobilevalidate.com/v1/lookup"
KEY = os.environ["MOBILEVALIDATE_API_KEY"]


def reach(numbers: list[str]) -> dict[str, dict]:
    """Live status, porting, current network and WhatsApp registration. None means we don't know."""
    r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
                      json={"numbers": numbers, "checks": ["hlr", "whatsapp"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        hlr, wa = row["checks"]["number.hlr"], row["checks"]["whatsapp.registered"]
        attrs = (hlr["attributes"] or {}) if hlr["status"] == "completed" else {}
        out[row["e164"]] = {
            "status": attrs.get("status"),
            "ported": attrs.get("ported"),
            "mcc_mnc": attrs.get("mcc_mnc"),
            "whatsapp": wa["registered"] if wa["status"] == "completed" else None,
        }
    return out


for number, info in reach(["+447700900001", "+447700900002", "+447700900005"]).items():
    print(number, info)
```

What it printed with the sandbox key on 2026-11-03:

```text
+447700900001 {'status': 'reachable', 'ported': False, 'mcc_mnc': '23415', 'whatsapp': True}
+447700900002 {'status': 'unreachable', 'ported': False, 'mcc_mnc': '23415', 'whatsapp': False}
+447700900005 {'status': None, 'ported': None, 'mcc_mnc': None, 'whatsapp': None}
```

The last test value answers `unsupported_country` for both checks, so everything is `None`. Keep `None` apart from `False`: `None` means we don't know, and it's never billed. Requests with 20 or more consecutive numbers are refused (`403 suspected_enumeration`), and our [acceptable use policy](/legal/acceptable-use) forbids finding recipients for unsolicited messages. People can object through our [opt-out form](/opt-out). See [WhatsApp number check](/services/whatsapp-number-check) and [carrier lookup](/services/carrier-lookup) for the fields.

## What are the key takeaways?

- French numbers are 10 digits at home and `+33` plus 9 digits in E.164; mobiles start `06` or `07`. Store `+336XXXXXXXX`, without the `(0)`, spaces or dots.
- Overseas departments have their own codes: a `0690` number is `+590`, a `0692` number `+262`. Parse them with their own region.
- `01` to `05` no longer prove a location (since 2023), `09` is mostly VoIP, `08` is special-rate, and `0162`, `0163`, `0270` … `0949` are verified numbers used by automated callers.
- The prefix names the block holder in Arcep's list, not the current network: porting has run since 1 July 2003, with a RIO from 3179 and a one-working-day delay.
- Use Arcep's fiction ranges (`01 99 00 XX XX` and the others) in examples, never real numbers.
- Since 11 August 2026, sales calls to consumers need prior, recorded consent and Bloctel no longer applies; marketing SMS have needed prior consent under L34-5 for years.
- Calls from abroad with unauthenticated French mobile numbers are masked since 1 January 2026, so plan voice OTP accordingly.

Network, regulator and company names are used descriptively. MobileValidate is not affiliated with any of them.

## Sources

1. [Plan national de numérotation et ses règles de gestion (annex to decision 2018-0881 as amended; version of 1 January 2026), Décision n° 2025-2215 du 27 novembre 2025](https://www.arcep.fr/uploads/tx_gsavis/25-2215.pdf) — Arcep (Autorité de régulation des communications électroniques, des postes et de la distribution de la presse), 2025
2. [Décision n° 2022-1583 modifiant le plan national de numérotation (version of 1 September 2022)](https://www.arcep.fr/uploads/tx_gsavis/22-1583.pdf) — Arcep, 2022
3. [Numérotation : l'Arcep fait évoluer le plan national de numérotation (press release, 5 September 2022)](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/plan-de-numerotation-050922.html) — Arcep, 2022
4. [Plan de numérotation : l'Arcep adopte sa décision (press release, 2 December 2025)](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/plan-de-numerotation-021225.html) — Arcep, 2025
5. [Authentification des numéros de téléphone fixe ou mobile : que faire en tant qu'opérateur téléphonique ?](https://www.arcep.fr/mes-demarches-et-services/acteurs-regules/operateurs-telecoms/fiches-pratiques/authentification-numeros-telephone-fixe-ou-mobile-que-faire-en-tant-que-operateur-telephonique.html) — Arcep, 2026
6. [Protection des consommateurs : l'Arcep ouvre une enquête administrative sur l'origine et les routes des appels impliqués dans les fraudes (press release, 29 January 2026)](https://www.arcep.fr/actualites/actualites-et-communiques/detail/n/protection-des-consommateurs-290126.html) — Arcep, 2026
7. [La portabilité des numéros de téléphone fixes et mobiles](https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation/portabilite-numeros-telephone-fixes-et-mobiles.html) — Arcep, 2026
8. [Ressources en numérotation téléphonique (MAJNUM, allocated number blocks; downloaded 2026-11-03)](https://www.data.gouv.fr/fr/datasets/ressources-en-numerotation-telephonique/) — Arcep via data.gouv.fr, 2026
9. [Identifiants de communications électroniques (operator codes)](https://www.data.gouv.fr/fr/datasets/identifiants-de-communications-electroniques/) — Arcep via data.gouv.fr, 2026
10. [Identifier un opérateur par un numéro](https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/identifier-un-operateur-par-un-numero.html) — Arcep, 2026
11. [Changer d'opérateur de téléphonie mobile : conserver son numéro (portabilité)](https://www.service-public.gouv.fr/particuliers/vosdroits/F22479) — Service-Public.fr (Direction de l'information légale et administrative), 2026
12. [Loi n° 2025-594 du 30 juin 2025 contre toutes les fraudes aux aides publiques, article 13](https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000051824325) — Légifrance, 2025
13. [Code de la consommation, article L223-1 (version in force from 11 August 2026)](https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000051830285/2026-08-11) — Légifrance, 2026
14. [Décret n° 2026-662 du 23 juillet 2026 relatif aux modalités de recueil, de conservation et de retrait du consentement du consommateur à des fins de prospection commerciale par voie téléphonique](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000054483939) — Légifrance, 2026
15. [Code des postes et des communications électroniques, article L34-5](https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042155961) — Légifrance, 2020
16. [Décision n° 2026-1210 QPC du 25 juin 2026 (Société Orange SA)](https://www.conseil-constitutionnel.fr/decision/2026/20261210QPC.htm) — Conseil constitutionnel, 2026
17. [La prospection commerciale par courrier électronique, SMS-MMS et automate d'appel](https://www.cnil.fr/fr/la-prospection-commerciale-par-courrier-electronique-sms-mms-et-automate-dappel) — CNIL, 2026
18. [Ne plus recevoir de SMS publicitaires](https://www.cnil.fr/fr/plainte/telephonie/ne-plus-recevoir-de-sms-publicitaires) — CNIL, 2026
19. [Bloctel, liste d'opposition au démarchage téléphonique](https://www.bloctel.gouv.fr/) — Bloctel (French government service), 2026
20. [Démarchage téléphonique, fin de Bloctel : ce qui change le 11 août](https://www.blogdumoderateur.com/demarchage-telephonique-fin-bloctel-11-aout/) — Blog du Modérateur, 2026
21. [Article D223-9 of the French Consumer Code (consolidated, in force since 11 August 2026; English translation)](https://french-business-law.com/french-legislation-art/article-d223-9-of-the-french-consumer-code) — French Business Law, 2026
22. [Directive 2002/58/EC on privacy and electronic communications (ePrivacy Directive)](https://eur-lex.europa.eu/eli/dir/2002/58/oj) — EUR-Lex, Publications Office of the European Union, 2002
23. [Directive (EU) 2018/1972 establishing the European Electronic Communications Code](https://eur-lex.europa.eu/eli/dir/2018/1972/oj) — EUR-Lex, Publications Office of the European Union, 2018
24. [Regulation (EU) 2016/679 (General Data Protection Regulation)](https://eur-lex.europa.eu/eli/reg/2016/679/oj) — EUR-Lex, Publications Office of the European Union, 2016
25. [libphonenumber PhoneNumberMetadata.xml (regions FR, GP, GF, MQ, RE, YT, PM)](https://github.com/google/libphonenumber/blob/master/resources/PhoneNumberMetadata.xml) — libphonenumber project (Apache License 2.0), 2026

## Frequently asked questions

### How many digits is a French phone number?

Ten digits when written in France, starting with 0, for example 06 XX XX XX XX. In international form you drop the 0 and add the country code +33, so nine digits follow +33: +33 6 XX XX XX XX. Mobile, landline, VoIP and special numbers all have this length, except a few long machine-to-machine numbers starting 0700.

### What is the France country code for WhatsApp and international calls?

+33. Drop the leading 0 of the French number: 06 XX XX XX XX becomes +33 6 XX XX XX XX. People often write +33 (0)6 …, which is fine for reading, but save the E.164 form +336XXXXXXXX without the 0, spaces or dots. Overseas departments have their own codes, such as +590 for Guadeloupe and +262 for Réunion and Mayotte.

### Are 06 and 07 numbers always mobile in France?

Yes. Arcep, the French telecoms regulator, reserves 06 and 07 for mobile numbers used by one person for calls and messages. Machine-to-machine services use long 0700 numbers instead. Some blocks are not mainland mobiles: 0690 to 0694, 0696, 0697 and 0639 belong to overseas departments, and 073 and 079 have no mainland blocks allocated yet.

### Can I tell the operator from a 06 or 07 prefix?

No. Arcep allocates mobile numbers to operators in blocks, so a prefix names the operator that received the block, not today's network. Numbers have been portable since 1 July 2003, and a switch takes about a working day. To know the current network, look up each number.

### What is the RIO code and how do I keep my number?

The RIO (relevé d'identité opérateur) is a 12-character code that proves you hold the line. Call 3179 from your mobile, which is free and works on every network at any time, and you receive the code by voice and SMS. Give the number and the RIO to the new operator: it requests the port and the old contract ends automatically.

### Are there fictional French phone numbers for films and tests?

Yes. Arcep's numbering plan reserves six blocks of 10,000 numbers for fiction: 01 99 00 XX XX, 02 61 91 XX XX, 03 53 01 XX XX, 04 65 71 XX XX, 05 36 49 XX XX and 06 39 98 XX XX. Arcep never allocates them to an operator, so they are never assigned to anyone.

### Is cold calling still allowed in France after Bloctel?

No. Since 11 August 2026, article L223-1 of the Consumer Code bans telephone prospecting of consumers who have not given prior consent, and the Bloctel opt-out list no longer applies. Consent must be a clear positive act, lasts at most one year and must be kept as proof for three years. Calls about an existing contract are exempt.

### Do I need consent to send marketing SMS in France?

Yes, for SMS to individuals. Article L34-5 of the Postal and Electronic Communications Code requires prior consent, and the CNIL says pre-ticked boxes or accepting terms of use don't count. The exception is an existing customer offered similar products who could refuse at collection. Every message must identify the sender and offer a free way to stop.
