
+86 139 1234 5678 is a valid mainland China mobile number. Written domestically, it’s 139 1234 5678. The rule behind it is simple: mainland Chinese mobile numbers run to 11 digits and always start with the number 1, with the second digit falling somewhere between 3 and 9.
That’s the whole rule, but two things trip people up constantly:
Get those two points right and you’ll format, validate or dial almost any mainland mobile number correctly on the first try.
Correctly formatting mainland Chinese mobile numbers means storing them in E.164, displaying them locally, and never assuming the prefix reveals the current carrier.
| Point | Details |
|---|---|
| Standard length is 11 digits | Mainland mobile numbers always start with 1 and run to 11 digits total, with no area code attached. |
| IoT numbers are the exception | Data-only and device SIMs can run to 13 digits, so don’t flag them as errors automatically. |
| Drop the trunk 0 for international format | Never write +86 0139…; the domestic 0 is dropped whenever the +86 country code is present. |
| Store international format, display local | Keep +8613912345678 in databases and APIs; show 139 1234 5678 to Chinese audiences. |
| Prefixes no longer guarantee carrier | Mobile number portability since 2019 means the first three digits show who issued the number, not who carries it. |
| Use Phonenumbers for UK number needs | For memorable, portable UK numbers with the same formatting discipline covered here, Phonenumbers handles sales and rental directly. |
Most confusion around Chinese numbers comes down to which format fits which context. Here’s the same number written four different ways, each one correct for its purpose.
National format, used inside China on forms, receipts and business cards:
International format, used when dialling from outside China or listing a number for overseas contacts:
E.164 format, the compact machine-readable version used in databases, APIs and SMS gateways:
Quick stat: A standard mainland mobile number is 11 digits, with no area code attached to it. Mobile numbers in China are assigned by carrier and region blocks, not by geography the way landlines are, so there’s nothing resembling a UK-style dialling code to strip out or add back in.
Now for the version that looks plausible but is wrong: +86 0139 1234 5678. That leading 0 is a domestic trunk prefix, the digit Chinese callers dial before a number when making a landline call within the country. It has no place in an international or E.164 string. Writing +86 0139… is the equivalent of writing +44 0207… for a London number; the 0 gets dropped the moment the country code appears.
One more example worth knowing, because it’s genuinely different rather than just mistyped: IoT and data-only numbers, used for connected devices, telemetry SIMs and some machine-to-machine services, can run to 13 digits rather than 11. A typical example looks like 1410 1234 5678 9. If a number you’re validating doesn’t fit the standard 11-digit pattern, check whether it falls into this reserved category before assuming it’s an error.
For a broader sense of how business phone numbers get presented across formats and contexts, see how custom phone numbers work in a digital world, which covers similar formatting logic from a UK perspective.
An 11-digit mobile number breaks down into three readable chunks: a 3-digit prefix, a 4-digit block, and a final 4-digit block. So 139 1234 5678 reads as prefix, then two groups of four. That structure isn’t arbitrary. It’s how the number was historically built to signal which carrier issued it and roughly when.
The prefix always starts with 1, and the second digit sits somewhere in the 3 to 9 range. Historically, each three-digit prefix mapped to a specific carrier: China Mobile, China Unicom or China Telecom. A number starting 139 or 138, for instance, traditionally belonged to China Mobile, while 186 or 189 leaned towards China Telecom.
That mapping is far less reliable today. Since China introduced mobile number portability at the end of 2019, subscribers can switch carriers while keeping their original number. The prefix still tells you who issued the number originally, but not who’s actually carrying the call now. Treat any carrier-detection logic based on prefix alone as a rough guess, not a fact.
| Prefix range | Historical carrier association |
|---|---|
| 139 | China Mobile |
| 151, 157 | China Mobile |
| 131, 145 | China Unicom |
| 133, 189 | China Telecom |
| 170, 171 | Virtual network operators |
A few practical notes sit alongside that table:
Get this one rule fixed and most formatting headaches disappear: store in E.164, display in whatever format suits the audience reading it.
That means your database, CRM field or API payload should hold +8613912345678, no spaces, no hyphens, always with the leading plus sign. When that same number appears on a webpage for Chinese visitors, render it as 139 1234 5678 or 1XX XXXX XXXX for readability. When it’s shown to an international audience, use +86 139 1234 5678.
The trunk-prefix rule from earlier applies here too. Never store or transmit +86 0139… The domestic 0 gets dropped the instant the +86 country code is present, whether that’s in a database field, an SMS gateway payload or a printed business card.
Privacy is worth building in from the start rather than bolting on later. Chinese digital platforms commonly mask mobile numbers in receipts, order confirmations and customer-service transcripts, showing the first three digits and the last four, with the middle replaced by asterisks: 139****5678. It’s a low-effort habit that meaningfully reduces accidental exposure of personal data in support logs and printed materials.

Pro Tip: If you’re building a contact form or CRM field for international customers, set the field to accept E.164 input but display a formatted preview underneath as the user types. It cuts input errors dramatically and avoids the classic mistake of double-entering the country code.
For comparison, the same storage-versus-display logic applies to other countries too. It’s worth seeing how the same principle plays out in a worked Australian phone number example if you’re building a system that needs to handle multiple country formats consistently.
The string you dial depends entirely on where you’re calling from, and the logic is the same one behind every international call: replace the domestic trunk prefix with an exit code plus the country code.
The domestic trunk 0 exists purely to signal “this is a local dial” within China’s own network. It has no meaning once you’ve already indicated the country with an exit code or a plus sign. Every international dialling string for a Chinese number, mobile or landline, should have that 0 stripped before the country code goes in. The country code itself, 86, is fixed and doesn’t vary by region, unlike exit codes, which do vary by the country you’re calling from.
Anyone building a form, database or verification flow around Chinese phone numbers hits the same three problems eventually: full-width digits, inconsistent punctuation, and prefixes that go stale.
Start with normalisation. Input from Chinese keyboards and IMEs frequently arrives in full-width character form, where digits and the plus sign look visually similar to their standard equivalents but carry different Unicode code points entirely. A regex built to match “+86” or a run of digits will silently fail against full-width equivalents unless you convert them first. The fix is a two-step normalisation pass: convert full-width characters to half-width, then strip everything except digits and a leading plus sign.
Once the input is clean, resist the urge to validate it with a hand-rolled regex. Prefix-based patterns look tidy but decay fast, because carriers periodically get assigned new prefix blocks, and a regex written in 2020 will start rejecting perfectly valid numbers within a few years. The better route is Google’s libphonenumber library, which tracks assigned number ranges and formatting rules as a maintained dataset rather than a static pattern, and handles the parsing, validation and formatting in one call.
Static regexes are the single most common failure point in production phone-validation code. They work perfectly on launch day and start silently rejecting valid numbers within a year or two, once new prefix ranges are assigned and nobody remembers to update the pattern.
A few implementation notes worth keeping close:
Pro Tip: Build your normalisation step as a standalone function you can unit test independently of your validation logic. Full-width digit handling is exactly the kind of edge case that gets forgotten until a real user in Shanghai reports a broken signup form.
Contact pages, CRM imports and support tools all benefit from the same discipline: one canonical storage format, consistent display rules, and validation that happens once, at the point of entry.
For a contact page or footer aimed at Chinese customers, store +8613912345678 in the backend and render it as 139 1234 5678 on the page itself, ideally with a click-to-call link using the full E.164 string as the href value. CRM import templates should include a validation step against libphonenumber before records are committed, catching malformed entries before they pollute a database that’s painful to clean up later.
A few habits worth building into any import or contact workflow:
Businesses managing their own memorable number ranges will recognise this problem well. Phonenumbers deals with exactly this kind of formatting and portability logic daily across UK numbers, and the same underlying discipline, one canonical format, consistent local display, careful handling of prefixes, applies just as well to Chinese numbers in an international contact system. If you’re weighing up how mobile numbers get used across a growing business more broadly, this piece on the rise of mobile numbers in business covers some of the same ground from a different angle.
Getting the 0139 mistake out of your systems isn’t pedantry. It’s the difference between a verification SMS that arrives and one that silently vanishes into a gateway that couldn’t parse the number. Support teams spend real time chasing “I never got my code” tickets that trace back to a single misplaced digit.
The fix costs almost nothing: store in E.164, display locally, run everything through libphonenumber rather than a regex you’ll forget to maintain. Check your assumptions against the numbering plan every so often, because portability and new prefix ranges mean the rules shift slightly over time even when the core structure doesn’t.
If you’re setting up UK contact numbers and want the same formatting discipline this article just walked through, that’s what Phonenumbers handles day to day. We sell and rent memorable 01, 02, 07, 03 and 08 numbers, with full portability between providers, so you’re not locked into one carrier just because you picked a number from them.

Numbers aren’t tied to local areas any more, so a Leeds-looking 0113 number or a national 0115 range can sit on a business anywhere in the country, forwarded to whichever line you actually answer. Browse the full Phonenumbers store to search by sequence, area code or town, or look at a live example like this 0113 255 0000 listing to see how availability and pricing are laid out. If a number catches your eye, checking availability takes a couple of minutes.
Mainland Chinese mobile numbers are 11 digits long and always start with the digit 1. IoT and data-only numbers are the exception, running to 13 digits.
Yes, +86 is China’s ITU country calling code, used before the national number whenever you’re dialling from outside mainland China or writing the number in international format.
A valid example is +86 139 1234 5678 in international format, 139 1234 5678 written domestically, or +8613912345678 in E.164 form for databases and software.
No, +44 is the United Kingdom’s country code. China’s country code is +86, and the two should never be confused when formatting or dialling international numbers.
The leading 0 is a domestic trunk prefix used only within China for local dialling, and it’s dropped automatically once the +86 country code is present in the number.