# China phone number format (+86): how to validate Chinese mobile numbers

> China phone number format: +86 and 11-digit mobiles starting with 1, the 13–19 blocks by operator, area codes, tested validation code and porting.

Canonical: https://mobilevalidate.com/blog/china-phone-number-format · Last updated: 2026-10-10

![A +86 chip over wavy terrace lines, a highlighted 1 followed by ten digit dots in groups of two, four and four, bars for the 13 to 19 blocks, a port between two towers, and separate +852 and +853 chips.](https://mobilevalidate.com/images/blog/china-phone-number-format.svg)

*Mainland mobiles are 11 digits starting with 1; the block shows the original network, not the current one.*


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-10-10 · Category: Guides · Tags: China, Phone validation, E.164, MNP, Libphonenumber

The China phone number format for mobiles is +86 followed by 11 digits that always start with 1, written `+86 13X XXXX XXXX` from abroad and `13X XXXX XXXX` at home, with no leading 0. Store it in E.164 as `+8613XXXXXXXXX`. Landlines are different: a 2- or 3-digit area code after the trunk prefix 0 (`010` for Beijing), dropped after +86. Mobile numbers can be ported between operators, so the `13X`–`19X` block tells you where the number started, not which network serves it today.

This guide is part of our [phone numbers by country](/blog/phone-numbers-by-country) series. The tables are generated from libphonenumber's metadata and our public catalog. Example numbers are masked with X. "China" here means mainland China (`CN`). Hong Kong and Macau have their own numbering plans, covered [below](#are-hong-kong-and-macau-numbers-chinese-numbers).

## What does a Chinese phone number look like?

A mobile number has 11 digits and starts with `1`: `13X XXXX XXXX`, grouped 3-4-4. Unlike landlines, mobile numbers are written without a trunk prefix, so the national and international forms differ only by `+86`. Landlines use the trunk prefix `0` and an area code. The largest cities have 2-digit area codes and 8-digit local numbers, such as `010` Beijing, `020` Guangzhou and `021` Shanghai. Elsewhere the area code has 3 digits, such as `0755` for Shenzhen, and the local number 7 or 8 digits ([Wikipedia](https://en.wikipedia.org/wiki/Telephone_numbers_in_China)).

<!-- country-data:CN: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 | `+86` |
| International call prefix (dialling out) | `00` |
| Trunk prefix (dialling at home) | `0` |
| Mobile: digits after +86 | 11 |
| Fixed line: digits after +86 | 7–11 |
| Toll-free: digits after +86 | 10, 12 |
| Premium rate: digits after +86 | 8 |
| Shared cost: digits after +86 | 7–11 |
| Mobile, national format (masked) | `13X XXXX XXXX` |
| Mobile, international (masked) | `+86 13X XXXX XXXX` |
| Mobile, E.164 (masked) | `+8613XXXXXXXXX` |
| Fixed line, national format (masked) | `031X XXXX XXXX` |
| Fixed line, international (masked) | `+86 31X XXXX XXXX` |
| Fixed line, E.164 (masked) | `+8631XXXXXXXXX` |
<!-- country-data:CN:format:end -->

From abroad, drop the `0` of a landline: `010 XXXX XXXX` becomes `+86 10 XXXX XXXX`. Forms in China often collect numbers as `13XXXXXXXXX` or `8613XXXXXXXXX` without a plus; a numbering-plan library with the default region `CN` turns both into `+8613…`.

## Which prefixes are mobile numbers?

All mobile numbers start with `1`, but not every block is in use. For each 2-digit block, the generator counted every 11-digit number that libphonenumber's mobile pattern for `CN` accepts:

<!-- country-data:CN: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 (11-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `13` | `+86 13` | 100% | — |
| `14` | `+86 14` | 20.0% | not mobile: 140–144, 146, 148, 149 |
| `15` | `+86 15` | 90.0% | not mobile: 154 |
| `16` | `+86 16` | 41.0% | not mobile: 160, 163, 164, 168, 169; partly mobile: 161 (10.0%) |
| `17` | `+86 17` | 80.6% | not mobile: 179; partly mobile: 174 (6.0%) |
| `18` | `+86 18` | 100% | — |
| `19` | `+86 19` | 90.0% | not mobile: 194 |
<!-- country-data:CN:prefixes:end -->

In short: `13X` and `18X` are fully in use, `15X` except `154`, `19X` except `194`. The `14X` and `16X` blocks are only partly used. In `161`, only `1610` is a mobile range. In `174`, only `17400` to `17405`, opened for China Telecom in 2017 ([ITU](https://www.itu.int/dms_pub/itu-t/oth/02/02/T020200002B0006PDFE.pdf)).

### Which operator does each block belong to?

Each block was allocated to one operator. This table follows libphonenumber's carrier file for +86 ([86.txt](https://github.com/google/libphonenumber/blob/master/resources/carrier/en/86.txt), read on 2026-10-10 via the Python port 9.0.40) and the Ministry of Industry and Information Technology's (MIIT) notifications to the ITU:

| Original operator | Mobile blocks |
|---|---|
| China Mobile | 1340–1348, 135–139, 147, 150–152, 157–159, 172, 178, 182–184, 187, 188, 195, 197, 198 |
| China Unicom | 130–132, 145, 155, 156, 166, 175, 176, 185, 186, 196 |
| China Telecom | 133, 153, 162, 173, 177, 180, 181, 189, 190, 191, 193, 199, 17400–17405 |
| China Broadcasting Network (CBN) | 192, 1610 |
| Virtual operators (MVNOs), by host network | 170 (1700–1702 China Telecom; 1703, 1705, 1706 China Mobile; 1704, 1707–1709 China Unicom), 171 (China Unicom), 165 (China Mobile), 167 (China Unicom) |

The ITU filings date several of these: `171` for China Unicom's virtual operators from 24 July 2015, `165` for China Mobile's from 1 January 2018, `167` for China Unicom's from 1 November 2018, `162` for China Telecom from 30 September 2018, and `190` and `193` for China Telecom from 10 September 2020 ([ITU](https://www.itu.int/dms_pub/itu-t/oth/02/02/T020200002B0006PDFE.pdf)). The same filings list IoT-only ranges: 11-digit `146` (China Unicom) and `148` (China Mobile), and 13-digit numbers such as `1440`, all from 2017. libphonenumber's `CN` mobile pattern rejects all of them, so a device SIM can fail validation and still be a working number. `1349`, which Wikipedia lists as a former satellite range, passes the pattern but has no operator in the carrier file.

Treat the table as the range holder, never as the current network. We explain why [below](#does-number-portability-change-the-carrier).

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

Use a libphonenumber port with full metadata and the default region `CN`, and check the region it returns. With `CN` as the default, `+852` and `+853` numbers still parse, as Hong Kong and Macau numbers.

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

/** "13X XXXX XXXX", "+86 13X …", "0086 13X …", "8613X…" → E.164 for a mainland China mobile, or null. */
export function normalizeCn(raw) {
  const phone = parsePhoneNumberFromString(String(raw), "CN");
  return phone?.isValid() && phone.country === "CN" && phone.getType() === "MOBILE" ? phone.number : null;
}
```

We ran it on 2026-10-10 with libphonenumber-js 1.13.13 (metadata 9.0.39). It returned an E.164 number for rows 1 to 5 below and `null` for the rest. The shape regex column tests `^(?:\+86|0086|0)?1\d{10}$`, the pattern most tutorials give, after spaces, dashes and brackets are removed:

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

| # | Case | Input (masked) | Shape regex `^(?:\+86\|0086\|0)?1\d{10}$` | libphonenumber (`CN`) |
|---|---|---|---|---|
| 1 | National format (no trunk prefix written) | `13X XXXX XXXX` | passes | valid, `MOBILE` |
| 2 | International, with spaces | `+86 13X XXXX XXXX` | passes | valid, `MOBILE` |
| 3 | International dialling prefix 00 | `0086 13X XXXX XXXX` | passes | valid, `MOBILE` |
| 4 | E.164 | `+8613XXXXXXXXX` | passes | valid, `MOBILE` |
| 5 | Dashes and brackets | `(13X) XXXX-XXXX` | passes | valid, `MOBILE` |
| 6 | One digit short | `13XXXXXXXX` | fails | invalid |
| 7 | One digit too many | `13XXXXXXXXXX` | fails | invalid |
| 8 | Mobile shape, unused block 10 | `10XXXXXXXXX` | passes | invalid |
| 9 | Fixed line | `031X XXXX XXXX` | fails | valid, `FIXED_LINE` |
| 10 | Toll-free range | `010 8XX XXX XXXX` | fails | valid, `TOLL_FREE` |
<!-- country-data:CN:tests:end -->

Row 8 is the one to remember: `10X…` has the right length and passes the regex, but no mobile range starts there. The same goes for `154`, `179` and `194`. A stricter regex like `^1[3-9]\d{9}$` still accepts every unused block from `13` to `19`. Row 10 is the 12-digit `10800` toll-free range: the regex rejects it, while libphonenumber knows it as toll-free. More languages are in our [JavaScript](/blog/phone-number-validation-javascript) guide and the [E.164 guide](/blog/e164-phone-number-format-guide-for-developers).

## Does number portability change the carrier?

Yes. China's porting service, 携号转网, launched nationwide on 27 November 2019, after pilots in five provincial-level regions where about 3.16 million subscribers had already ported ([China Daily/Xinhua, 2019](https://govt.chinadaily.com.cn/s/201911/27/WS5ddf5c73498e7df3800efb25/china-launches-mobile-number-portability-program.html)). MIIT issued its rules for the service, the Provisions on the Administration of Number Portability Services, on 11 November 2019. Its explanation of those rules says the service doesn't currently cover IoT, satellite or MVNO (resale) numbers ([MIIT](https://www.miit.gov.cn/jgsj/xgj/fwjd/art/2020/art_c89d0c703085462cb25d46b12badc13e.html)).

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

Our MNP atlas has no verified row for China yet.
<!-- country-data:CN:mnp:end -->

So a `139` number may be served by China Telecom today, and a `189` number by China Mobile. libphonenumber's carrier data names the operator a range was first assigned to, which isn't necessarily the current one. For routing, SMS cost or fraud rules, look the number up. Our [MNP lookup](/services/mnp-lookup) returns `ported` or `not_ported` and the current MCC/MNC; see [how to get the MCC and MNC from a number](/blog/how-to-get-mcc-mnc-from-a-phone-number).

## What does real-name registration mean for validation?

Mainland phone lines are registered to the subscriber's real identity. MIIT Order No. 25 made real-name registration mandatory for fixed and mobile lines from 1 September 2013 ([gov.cn](https://www.gov.cn/gongbao/content/2013/content_2473882.htm)). The Anti-Telecom and Online Fraud Law, in force since 1 December 2022, requires operators to apply it fully ([Xinhua](https://www.news.cn/politics/2022-09/02/c_1128972095.htm)).

This is useful context, not a data source. The identity behind a number stays with the operator. No lawful lookup, ours included, returns a subscriber's name or ID number, and a valid, registered number tells you nothing about who is using it.

## Which messaging apps work with +86 numbers?

SMS reaches every active mobile. WhatsApp is blocked in mainland China, and on 19 April 2024 Apple removed WhatsApp and Threads from its China App Store on the order of the Cyberspace Administration of China; Telegram and Signal were not available there either ([HKFP/Reuters, 2024](https://hongkongfp.com/2024/04/19/apple-removes-whatsapp-threads-from-app-store-in-china-on-government-orders/)). The same report notes that some users still reach blocked apps through a VPN.

The block is on network access in the mainland, not on the number itself. A +86 number can still hold an account, for example when its owner lives or travels abroad. So a "registered" result for a +86 number is a fact about the account, not evidence that the person uses the app day to day. For OTP and service messages to mainland users, plan for SMS first. Our [channel-by-country guide](/blog/choosing-a-messaging-channel-by-country) shows how to choose from your own opted-in data.

## Are Hong Kong and Macau numbers Chinese numbers?

Not for validation. Hong Kong has the country code `+852` and Macau `+853`. Both use 8-digit numbers without area codes, and Macau mobiles start with `6` ([libphonenumber](https://github.com/google/libphonenumber/blob/master/resources/PhoneNumberMetadata.xml)). They are separate numbering plans, administered separately from the mainland's, so store and check them as region `HK` or `MO`, never as `CN`. A form that hard-codes "+86" for every Chinese customer breaks for them, which is why `normalizeCn()` above checks `phone.country`. For lists that mix all three, parse with region detection and report the region per row. Our [Hong Kong](/blog/hong-kong-phone-number-format) and [Macau](/blog/macau-phone-number-format) phone number guides cover `+852` and `+853` in detail.

## What changed recently?

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

<!-- country-data:CN: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 |
|---|---:|
| Numbering-plan metadata (validation, lengths, types) | 12 |
| Original-carrier prefix data | 7 |
| Geocoding (area names) | 5 |
| Short numbers | 3 |
| All | 27 |

Latest numbering-plan updates for `CN`: 2026-07-16 (v9.0.35), 2024-08-07 (v8.13.43), 2024-07-11 (v8.13.41), 2024-03-06 (v8.13.32), 2023-02-23 (v8.13.7).
<!-- country-data:CN:changes:end -->

China's metadata changes more often than most countries' in this series. Update your validation library at least monthly, or numbers from newly opened ranges will fail.

## What can MobileValidate check for Chinese numbers?

Generated from our public catalog:

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

| Check | Accepts China 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*, RCS*, LINE*, Zalo, Botim*, Facebook Messenger* | Not for China numbers: iMessage (every country except China). |
| Social networks | Yes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat* | Not for China 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. † real time only for China numbers (not in bulk jobs). Catalog as fetched on 2026-10-12; the live list is at [`GET /v1/services`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:CN:coverage:end -->

Three gaps are specific to mainland China. The iMessage check doesn't cover +86 numbers. The Apple Account and WhatsApp registration checks cover them in real time only: in a bulk job, +86 rows answer `unsupported_country` and are free, and the job estimate lists them before you start. See [Apple ID number check](/services/apple-id-number-check). A lookup returns network and registration facts, never a subscriber's name or ID number.

Here is the porting check from code, after `normalizeCn()`. It uses the public sandbox key `mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym` and our [test values](/docs/test-values), which are UK drama numbers because the sandbox accepts only those. With a live key, pass the output of `normalizeCn()`. We ran it on 2026-10-10 with Node.js 24.

```js title="cn-porting.mjs"
const API = "https://api.mobilevalidate.com/v1/lookup";

/** Current network per number. The 13X–19X block only shows where the range was first allocated. */
export async function currentNetwork(numbers) {
  const res = await fetch(API, {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.MOBILEVALIDATE_API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({ numbers, checks: ["mnp"], wait: 5 }),
  });
  if (!res.ok) throw new Error(`lookup failed: ${res.status}`);
  const { results } = await res.json();
  return results.map((row) => {
    const mnp = row.checks["number.mnp"];
    return { e164: row.e164, status: mnp.status, porting: mnp.attributes?.porting ?? null, mccMnc: mnp.attributes?.mcc_mnc ?? null, billed: mnp.billed };
  });
}

console.table(await currentNetwork(["+447700900001", "+447700900006", "+447700900005"]));
```

| Test value | `status` | `porting` | `mccMnc` | `billed` |
|---|---|---|---|---|
| `+447700900001` | `completed` | `not_ported` | `23415` | `false` |
| `+447700900006` | `completed` | `ported` | `23410` | `false` |
| `+447700900005` | `unsupported_country` | `null` | `null` | `false` |

Test mode never bills; in live mode, `unknown` and `unsupported_country` answers aren't billed either. The same call with curl:

```bash
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900006"], "checks": ["mnp"], "wait": 5}'
```

See [MNP lookup](/services/mnp-lookup) and [HLR lookup](/services/hlr-lookup) for the fields, and [pricing](/pricing) for prices.

## What are the key takeaways?

- Mainland mobiles are `+86 1` plus ten digits, written without a leading `0`; store the E.164 form.
- Not every `1XX` block is live: `154`, `179`, `194` and most of `14X` and `16X` aren't mobile ranges today.
- The block shows the original operator. Porting has been nationwide since November 2019, so look up the current network when it matters.
- Hong Kong (`+852`) and Macau (`+853`) are separate plans; check the region a parser returns.
- WhatsApp is blocked in the mainland, so read registration results for +86 numbers with care. No lawful lookup returns who owns a number.

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

## Sources

1. [China (country code +86): communications on the national numbering plan, 2017 to 2020](https://www.itu.int/dms_pub/itu-t/oth/02/02/T020200002B0006PDFE.pdf) — ITU (notifications from the Ministry of Industry and Information Technology), 2020
2. [libphonenumber PhoneNumberMetadata.xml (region CN), carrier/en/86.txt and release notes](https://github.com/google/libphonenumber/blob/master/resources/carrier/en/86.txt) — libphonenumber project (Apache License 2.0), 2026
3. [Telephone numbers in China](https://en.wikipedia.org/wiki/Telephone_numbers_in_China) — Wikipedia, 2026
4. [Interpretation of the Provisions on the Administration of Number Portability Services (携号转网服务管理规定)](https://www.miit.gov.cn/jgsj/xgj/fwjd/art/2020/art_c89d0c703085462cb25d46b12badc13e.html) — Ministry of Industry and Information Technology (MIIT), 2019
5. [China launches mobile number portability program (27 November 2019)](https://govt.chinadaily.com.cn/s/201911/27/WS5ddf5c73498e7df3800efb25/china-launches-mobile-number-portability-program.html) — China Daily / Xinhua, 2019
6. [Provisions on Registration of Real Identity Information of Telephone Users (MIIT Order No. 25)](https://www.gov.cn/gongbao/content/2013/content_2473882.htm) — State Council Gazette (gov.cn), 2013
7. [Anti-Telecom and Online Fraud Law adopted (2 September 2022)](https://www.news.cn/politics/2022-09/02/c_1128972095.htm) — Xinhua, 2022
8. [Apple removes WhatsApp, Threads from App Store in China on government orders (19 April 2024)](https://hongkongfp.com/2024/04/19/apple-removes-whatsapp-threads-from-app-store-in-china-on-government-orders/) — Hong Kong Free Press (Reuters), 2024

## Frequently asked questions

### How many digits is a Chinese mobile number?

Eleven. Every mainland China mobile number has 11 digits and starts with 1, for example 13X XXXX XXXX. In E.164 format it is +86 followed by those 11 digits, 13 digits in total without the plus sign.

### Do I add a 0 before a Chinese mobile number?

No. Mobile numbers are written without a trunk prefix: 13X XXXX XXXX at home and +86 13X XXXX XXXX from abroad. The 0 belongs only in front of landline area codes, such as 010 for Beijing, and is dropped after +86.

### Does the 13X, 15X or 18X block tell me the operator?

Only the operator the block was first allocated to. Mobile number portability has been available nationwide in mainland China since November 2019, so a number that started on one operator may now be served by another. Look up the current network when it matters.

### Are Hong Kong and Macau numbers Chinese numbers?

Not for validation. Hong Kong uses the country code +852 and Macau +853, each with its own 8-digit numbering plan. A +852 or +853 number never passes a +86 check, and a validator should report HK or MO as the region, not CN.

### Can a lookup tell me who owns a Chinese number?

No. Real-name registration data stays with the operators. A MobileValidate lookup returns network and registration facts, never a name, an ID number or an address.
