Guides

Taiwan phone numbers: format, 09 mobiles, validation and messaging rules

Taiwan phone number format: +886 and 10-digit 09 mobiles, area codes, 0800 and 070 ranges, tested code, porting since 2005 and the anti-fraud SMS rules.

By Published 24 min readHow we research and fact-check

On this page

Taiwan phone numbers use the country code +886. A mobile number has 10 digits at home and starts with 09, such as 0912-XXX-XXX; from abroad you drop the 0, so it becomes +886 912 XXX XXX, nine digits after the code. The prefix doesn't tell you the network: numbers have been portable since 13 October 2005.

This guide is part of our phone numbers by country series. The tables are generated from libphonenumber's metadata, our MNP atlas and our public catalog. Example numbers are masked with X. The code samples use libphonenumber's own example numbers, which are for testing only; don't call or text them. On 2026-11-07 we read the Ministry of Digital Affairs (MODA) numbering plan, the laws in the Ministry of Justice's national law database and the National Communications Commission (NCC) and police pages. Most are in Chinese only. This is a summary, not legal advice.

What does a Taiwan phone number look like?

At home, a mobile number is written 0912-XXX-XXX: the trunk prefix 0, then nine digits starting with 9, ten in all. MODA's numbering plan describes the format as 0 + 9BC (service code) + DE (operator code) + FGHI (subscriber number), and gives the blocks 090 to 098 to mobile services, each with a total length of 10 digits including the 0 (MODA numbering plan, sections 2 and 3). From abroad you dial your exit code, 886, and the number without its 0.

Who sets the plan changed in 2022. Taiwan's first numbering plan was issued by the Ministry of Transportation and Communications in 1996. Under article 68 of the Telecommunications Management Act, the plan has been MODA's since 27 August 2022 (MODA numbering plan, foreword). The NCC still licenses and supervises the operators and enforces the anti-fraud duties described below.

Landlines follow a different pattern:

  • 0 + area code + local number. Area codes have one to three digits after the 0. Local numbers have five to eight digits, so a landline is 9 or 10 digits at home and 8 or 9 after +886.
  • Taipei has the longest local numbers. 02 (Taipei, New Taipei and Keelung) has eight-digit local numbers; most other areas have seven or six; Matsu (0836) and Wuqiu (0826) have five.
ItemValue
Country calling code+886
International call prefix (dialling out)0(?:0[25-79]|19) (pattern: more than one prefix is used)
Trunk prefix (dialling at home)0
Mobile: digits after +8869
Fixed line: digits after +8868, 9
Toll-free: digits after +8868, 9
Premium rate: digits after +8867, 9
Personal number: digits after +8869
VoIP: digits after +88610, 11
Universal access (UAN): digits after +8869
Mobile, national format (masked)091X XXX XXX
Mobile, international (masked)+886 91X XXX XXX
Mobile, E.164 (masked)+88691XXXXXXX
Fixed line, national format (masked)02 2XXX XXXX
Fixed line, international (masked)+886 2 2XXX XXXX
Fixed line, E.164 (masked)+88622XXXXXXX

Two lines need a word. The international call prefix is a pattern, not one code: Taiwan has several exit codes, one per international carrier. 002 is shared by all operators; 005, 006, 007 and 009, and 015 to 019 with gaps, were assigned to the original fixed-network operators (MODA numbering plan, notes 3 and 7). libphonenumber's pattern covers 002, 005 to 007, 009 and 019. And "Personal number: 9 digits" is the 099 range, which is not a mobile line (see below).

Store only the E.164 form: +886, then the national number without its 0, with no spaces, hyphens or brackets. Taiwanese forms often show +886-0912-… or (02) 2XXX-XXXX. Both parse correctly in libphonenumber, but don't save them that way.

Why does 00886 fail?

Because 00 on its own is not an exit code in Taiwan. People abroad, and staff used to European formats, write 00886 912 …. A parser set to region TW doesn't recognise 00 as an international prefix and reads the whole string as a national number, which is then invalid. 002 886 912 …, the way people dial from Taiwan, parses fine. Rewrite a leading 00886 to +886 before parsing. The code below does that.

Taiwan area codes

From MODA's table of national numbers (area code + local number):

Area codeAreaLocal number digitsDigits at home
02Taipei, New Taipei, Keelung810
03Taoyuan, Hsinchu, Hualien, Yilan79
037Miaoli69
04Taichung (8 digits), Changhua (7)7–89–10
049Nantou710
05Chiayi, Yunlin79
06Tainan, Penghu79
07Kaohsiung79
08Pingtung79
089Taitung69
082Kinmen69
0826Wuqiu59
0836Matsu59

Some local numbers starting with 4 are borrowed for nationwide "unified" business numbers, which reach a company from any area (MODA numbering plan, note 4). They look like landlines and are not mobiles.

A +886 card with a ring split into nine mobile blocks from 090 to 098, one ending in a bordeaux SAT sliver, beside three rows: an SMS with a URL tag and shield, a SIM with an ID card, and two towers marked 2005.A +886 card with a ring split into nine mobile blocks from 090 to 098, one ending in a bordeaux SAT sliver, beside three rows: an SMS with a URL tag and shield, a SIM with an ID card, and two towers marked 2005.
Ten-digit 09 mobiles, registered SMS links, ID-checked SIMs and porting since 2005.

Which prefixes are mobile numbers, and which are not?

The generator counted every 9-digit national number (after the 0) that libphonenumber's mobile pattern for TW accepts:

National prefixInternationalShare of the block that is mobile (9-digit numbers)3-digit sub-blocks that aren't fully mobile
090+886 90100%—
091+886 91100%—
092+886 92100%—
093+886 93100%—
094+886 94100%—
095+886 95100%—
096+886 96100%—
097+886 97100%—
098+886 98100%—
1 other blocks: 040—under 1% eacha few mobile sub-ranges each: 0400

All nine 09 blocks from 090 to 098 are fully mobile in libphonenumber. The 040 row is a handful of numbers starting 0400-01 that the library also types as mobile; it's under 1% of that block. In MODA's plan, 040 is the range for IoT numbers, 13 digits long and only for devices on public networks, and libphonenumber doesn't cover those yet.

Two details in MODA's plan matter more for validation than the table suggests:

RangeMODA's plan (as published, read 2026-11-07)libphonenumber 1.13.13What to do
090–098Mobile, 10 digitsMOBILEAccept as mobile
0969Satellite service, 10 digitsMOBILEReject for SMS and OTP
085, 086Mobile, 10 digitsinvalidRare; treat as "check again later" rather than a typo
081Reserved for mobileinvalidNot in service
099Personal number service, 10 digitsPERSONAL_NUMBERNot a mobile; reject for OTP

So a 0969 number passes "starts with 09, 10 digits" and passes libphonenumber's mobile check, yet MODA lists it as a satellite range. The code below rejects it. The 085 and 086 rows are the opposite case: the plan lists them as mobile, the library doesn't, and we found no sign yet of numbers in use.

Who holds the blocks?

The two digits after 09 were once a good guess at the operator. They aren't any more. Before 2023, Taiwan had five mobile network operators. Then Taiwan Star merged into Taiwan Mobile on 1 December 2023, and Asia Pacific Telecom into Far EasTone on 15 December 2023 (CNA, 2023). That leaves three: Chunghwa Telecom, Taiwan Mobile and Far EasTone, plus MVNOs (virtual operators on their networks).

Don't take the operator name from a library's carrier data

libphonenumber ships carrier prefix data for Taiwan (886.txt). As we read it on 2026-11-07, it still names "T Star" for 23 prefixes, almost three years after the merger. Even where a name is current, it shows who first received the block, not who serves the number today. Treat a library carrier name as a hint and, if the network matters, look it up per number.

What are 0800, 070, 099 and the other ranges?

These are valid Taiwanese numbers, but not personal mobiles. Here is what libphonenumber 1.13.13 returns for its own example numbers, as we tested on 2026-11-07:

RangeUse (MODA's plan)Digits at homelibphonenumber type
0800-XXX-XXXToll-free, the receiver pays (080 series, 8 to 10 digits)10TOLL_FREE
070-XXXX-XXXXInternet telephony (VoIP) with E.164 numbers11VOIP
0990-XXX-XXXPersonal number service10PERSONAL_NUMBER
020-XXX-XXXXInformation-charge (premium) service8 to 10PREMIUM_RATE
050-XXX-XXXXOrdinary-rate service numbers8 to 10UAN
0969-XXX-XXXSatellite service10MOBILE (see above)
040-XXXXX-XXXXXIoT devices13invalid (not in metadata 9.0.39)

Short codes are a separate family. Emergency numbers are 110 (police) and 119 (fire and ambulance). 165 is the police anti-fraud hotline. Four-digit 19XY codes are for non-profit public services, such as 1950 for consumer protection and 1995 for Lifeline (MODA numbering plan, section 2). None of them can be a sign-up number.

Why does a simple regex fail for Taiwanese numbers?

The pattern most tutorials give, "09 and eight more digits", gets three things wrong:

  • It accepts 0969 satellite numbers.
  • It rejects +886 0912 … with the stray 0 and 00886 …, which real users type.
  • It can't tell a mobile from the 099 personal numbers or the 070 VoIP numbers that people also type into "mobile" fields, because it only checks shape.

Only a library that carries the numbering plan, or a live lookup, can tell these apart. Our post on why an E.164 regex is not enough shows the same problem in other countries.

How do I validate a Taiwanese number in code?

Remove spaces and punctuation, rewrite 00886 to +886, parse with full metadata and the default region TW, keep only numbers typed as mobile, and drop 0969.

Python (pip install phonenumbers):

Python
import re

import phonenumbers
from phonenumbers import PhoneNumberType


def normalize_tw(raw: str) -> str | None:
    """E.164 for a Taiwanese mobile number (090 to 098), or None."""
    s = re.sub(r"[\s().-]", "", raw)
    # Taiwan's exit codes are 002, 005, 006, 007, 009 or 019, not 00, so "00886..." fails with region TW.
    s = re.sub(r"^00886", "+886", s)
    try:
        n = phonenumbers.parse(s, "TW")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "TW"
            or phonenumbers.number_type(n) != PhoneNumberType.MOBILE):
        return None
    # 0969 is the satellite range in the numbering plan; libphonenumber types it as mobile.
    if str(n.national_number).startswith("969"):
        return None
    return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)


for raw in ["0912-345-678", "+886 0912 345 678", "00886 912 345 678", "002 886 912 345 678",
            "0969-123-456", "0990-123-456", "070-1234-5678", "0800-123-456", "02-2123-4567", "0912-345-67"]:
    print(f"{raw!r:24} -> {normalize_tw(raw)}")

JavaScript (npm install libphonenumber-js):

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

/** "0912-…", "+886 0912 …", "00886 …" or "002 886 …" → E.164 for a Taiwanese mobile number, or null. */
export function normalizeTw(raw) {
  // Taiwan's exit codes are 002, 005, 006, 007, 009 or 019, not 00, so "00886…" fails with region TW.
  const input = String(raw).replace(/[\s().-]/g, "").replace(/^00886/, "+886");
  const phone = parsePhoneNumberFromString(input, "TW");
  if (!phone?.isValid() || phone.country !== "TW" || phone.getType() !== "MOBILE") return null;
  // 0969 is the satellite range in the numbering plan; libphonenumber types it as mobile.
  return phone.nationalNumber.startsWith("969") ? null : phone.number;
}

for (const raw of ["0912-345-678", "+886 0912 345 678", "00886 912 345 678", "002 886 912 345 678",
                   "0969-123-456", "0990-123-456", "070-1234-5678", "0800-123-456", "02-2123-4567", "0912-345-67"]) {
  console.log(JSON.stringify(raw).padEnd(24), "->", normalizeTw(raw));
}

We ran both on 2026-11-07 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). Except for 0969-…, the inputs are libphonenumber's example numbers. Both printed the same results; Python prints None and single quotes, JavaScript null and double quotes:

Text
'0912-345-678'           -> +886912345678
'+886 0912 345 678'      -> +886912345678
'00886 912 345 678'      -> +886912345678
'002 886 912 345 678'    -> +886912345678
'0969-123-456'           -> None
'0990-123-456'           -> None
'070-1234-5678'          -> None
'0800-123-456'           -> None
'02-2123-4567'           -> None
'0912-345-67'            -> None

The first four are the same number written four ways. The satellite number is dropped by the 969 check; without it, both libraries would return it as a mobile. The personal, VoIP, toll-free and landline numbers are valid but not mobile, so they're dropped too, and the last input is one digit short.

The generated test table runs the same idea over masked inputs, with the raw library call and no 00886 rewrite. The shape regex column tests the pattern most tutorials give, after spaces, dashes and brackets are removed:

#CaseInput (masked)Shape regex ^(?:\+886|00886|0)?[49]\d{8}$libphonenumber (TW)
1National, with trunk prefix091X XXX XXXpassesvalid, MOBILE
2International, with spaces+886 91X XXX XXXpassesvalid, MOBILE
3International dialling prefix 0000886 91X XXX XXXpassesinvalid
4E.164+88691XXXXXXXpassesvalid, MOBILE
5Dashes and brackets(091X) XXX-XXXpassesvalid, MOBILE
6One digit short091XXXXXXfailsinvalid
7One digit too many091XXXXXXXXfailsinvalid
8Mobile shape, unused block 044044XXXXXXXpassesinvalid
9Fixed line02 2XXX XXXXfailsvalid, FIXED_LINE
10Personal number range099X XXX XXXpassesvalid, PERSONAL_NUMBER

Rows 3, 8 and 10 are the ones to remember:

  1. Row 3: 00886 passes the regex, but libphonenumber on its own rejects it, because 00 isn't one of Taiwan's exit codes. Without the rewrite you lose real customers.
  2. Row 8: 044 is shaped like a number the regex accepts but isn't a valid range, so an OTP sent to it is wasted.
  3. Row 10: 099 passes the regex and libphonenumber says it's valid, but as PERSONAL_NUMBER. If your sign-up flow only wants mobiles, check the type, not just validity.

Our Python and JavaScript guides cover more languages. Update your library regularly: Taiwan's metadata changes rarely (see "What changed recently?"), but when it does, an old copy rejects real numbers.

Does number portability change the carrier?

Yes. Mobile number portability (MNP) started on 13 October 2005, at a launch the Premier attended (Executive Yuan, 2005). The first rules, issued in 2003, were repealed on 17 March 2025 (law database, history). Since 1 July 2020, the Regulations on Number Portability Services of Telecommunications Enterprises, made under article 16 of the Telecommunications Management Act, have set the rules (law database):

  • Every operator, from day one (Art. 3). Operators must offer portability from the day they start using subscriber numbers. That includes MVNOs.
  • Same category only (Art. 3). Numbers port within their category: landline to landline (normally at the same address), mobile to mobile, and 080 toll-free to 080. A mobile number can't move to a landline service, or the other way round.
  • One application, to the new operator (Art. 5). The customer applies to the new operator, and that application also ends the old contract. The new operator agrees a switch date with the customer and must tell the central database at least four full working days before it. The old operator may refuse only if the line was suspended for unpaid bills or a breach, and may not try to win the customer back while the port is in progress.
  • Calls are routed by database lookup (Art. 6). The calling network looks up each number in a ported-numbers database before it connects the call, so a ported number works the same as any other.
  • "Same network?" check (Art. 4). Operators must give their customers a way to check whether a mobile number they call is on their own network. On-net and off-net calls are often priced differently, and the prefix can't tell you.

The rules set a minimum lead time, not a maximum time: the number moves on the switch date agreed with the customer.

Our MNP atlas has no verified row for Taiwan yet.

The facts above are what we would add to the atlas. Our MNP atlas compares portability across countries, and how to check if a phone number is ported shows the lookup. Twenty years of porting and two mergers mean the block holder is a weak guess. For routing, pricing or fraud rules, look up the current network per number.

What are the rules for SMS, SIM cards and personal data?

These summarise the laws and official pages as we read them on 2026-11-07. Not legal advice; ask counsel how they apply to you.

The Fraud Crime Hazard Prevention Act

The Fraud Crime Hazard Prevention Act (詐欺犯罪危害防制條例) was promulgated on 31 July 2024 and amended on 21 January 2026; the 2026 amendment didn't touch the telecom articles (law database). Section 2 of its second chapter sets the telecom duties. Most took effect on promulgation; articles 19, 20, 22 and 24 took effect on 30 November 2024 (law database, history).

ArticleWhat it requires
Art. 14Operators must take reasonable measures to stop their services being misused for fraud. When the telecom regulator or the police name a fraud pattern, they must prevent, block or report it where technically possible
Art. 15Anyone applying for a telecom service must show their own ID, and the operator must check it and record it before signing the contract
Art. 16A subscriber who hands a service to someone else must have the new user checked and recorded again, unless it's for family use or inside a company. Otherwise the operator must restrict or stop the service
Art. 17, 18When the regulator or the police report suspected fraud, the operator must re-verify the subscriber, and must restrict or stop the line once fraud use is confirmed
Art. 19Operators must check applicants against a government database chosen by the regulator
Art. 20, 22Roaming SIMs from designated high-risk foreign operators need a check of the user's entry record, and prepaid cards of non-nationals must be checked periodically against departure and overstay records and suspended when the person has left
Art. 23A person whose line was stopped for fraud may hold at most one number with that operator for three years
Art. 24, 25Fines for operators from NT$100,000 up to NT$20 million in serious cases, and possible limits on how many new numbers they are allocated

For you as a business, the practical effects are that a Taiwanese mobile number is tied to a verified identity when it's issued, and that lines used for fraud are cut off. Neither tells you who uses a number today.

The NCC used article 14(2) to require stricter checks on commercial SMS from 18 November 2024. It said more than 400,000 malicious messages had still got through between January and October 2024 (NCC press release, 13 November 2024):

  • Every commercial SMS is checked before sending. If it contains a URL, a short link or a phone number that doesn't match the business's registered data, or isn't registered, it isn't sent.
  • Register first. A business that sends links or phone numbers by SMS must apply to the operator first. Once approved, its URLs, short links and numbers are recorded, and later messages must match them. Any change needs a new application.
  • A green channel. Trusted business customers can be approved for a green channel, which skips the link and number checks.

For senders this means: register your own domain and call-back numbers with your SMS provider before a campaign, don't use generic link shorteners, and expect unregistered links to be dropped silently. Plain-text messages without links or numbers aren't affected by this check.

Government agencies use a separate route. Since 2023, MODA's "111" platform lets only authorised agencies send SMS from the short code 111. From June 2025, each message starts with the last three digits of the recipient's number and the agency's name, so people can tell it from fakes. By then more than 500 agencies and state-owned companies had sent over 60 million messages through it (MODA, 17 June 2025). Businesses can't use 111. Your customers have been taught that anything else claiming to be the government is suspect, so make your own sender easy to recognise.

The 165 anti-fraud hotline

165 is the National Police Agency's anti-fraud hotline. People call it to ask whether a message is a scam, to report one or to file a fraud complaint; reports can also be filed online at the 165 website (NPA FAQ). The NCC's own advice is to check any SMS that contains a link or phone number with 165 before acting on it. Expect your customers to do the same. A message that reads like a scam (urgent, a link, a request for personal data) gets reported, even when it's yours.

Personal data: the PDPA and the new commission

Taiwan's Personal Data Protection Act (個人資料保護法, PDPA) lists contact details among personal data (Art. 2), so a phone number in a customer record is covered (law database). For businesses, the articles that matter for number checks are:

ArticleRule
Art. 7Consent must follow the notice the law requires, and the collector must prove consent
Art. 8When collecting data, tell people who you are, the purpose, the data categories, how long, where and by whom it will be used, and their rights
Art. 19A business may collect or process personal data only for a specific purpose and on a listed basis, such as a contract, consent or a law
Art. 20Use must stay within the purpose. Marketing must stop as soon as the person refuses it, and the first marketing message must offer a way to refuse, at the sender's cost
Art. 21The authority may restrict international transfers, for example where the receiving country lacks adequate protection

We found no separate Taiwanese statute on unsolicited marketing SMS in the national law database. For marketing texts, the PDPA's purpose and opt-out rules and the carriers' SMS checks are what apply.

The regulator is changing. On 11 November 2025 the President promulgated a broad PDPA amendment. It names the Personal Data Protection Commission (PDPC) as the authority for the act, adds a duty to keep personal data files secure (new Art. 20-1), adds supervision and audit chapters and rewrites the breach and penalty articles (law database, history). Its start date is to be set by the Executive Yuan, and as of 2026-11-07 the law database still lists it as not yet in force. The commission itself still works as a preparatory office, which took over the National Development Council's duties under articles 53 and 55 of the act on 1 January 2024. The amendment also sets a transition: for six years after the commission is set up, sector regulators can keep supervising groups of businesses that the Executive Yuan names, with a review every two years. Until the new articles start, sector regulators supervise businesses under the current text.

If you send customer numbers to a check service, decide with counsel which PDPA purpose and basis cover it, how the cross-border rules apply to a provider outside Taiwan, and what changes when the 2025 amendment starts. Our posts on whether a phone number is personal data and on consent for WhatsApp checks give the baseline we work to: your own customers, a stated purpose, minimal data and honoured objections.

Which messaging apps reach people in Taiwan?

LINE is the dominant messenger. LY Corporation, which runs it, says LINE had 22 million monthly active users in Taiwan in 2024, out of a population of 23.42 million (LY Corporation, 2025). That's why many businesses in Taiwan send service notices through LINE official accounts rather than SMS. SMS still reaches every active mobile and remains the fallback for OTP and for people who don't use LINE.

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. Our channel-by-country guide shows the method.

How do I check LINE registration for a Taiwanese customer list?

Normalise every row with normalize_tw() first. 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:

AnswerWhat it meansWhat to do
registered: trueThe number has a LINE account at checked_atOffer LINE to customers who opted in to it
registered: falseNo account at checked_atUse SMS or another channel
unknownNo conclusive answer (not billed)Keep the current channel; retry later
invalid_numberFailed format validation (not billed)Fix the data at the source

The LINE check is bulk only: it runs in bulk jobs, not on the real-time endpoint. We tried a real-time call with the public sandbox key on 2026-11-07, and the API answered 403 service_disabled with the message "The check 'line.registered' is available in bulk jobs only (POST /v1/jobs)." Bulk-only checks are billed at least a per-country minimum (for LINE, the price of 2,000 checks) for each country that returns at least one answer. A country with no answers is free, so send your Taiwanese numbers in one job. See LINE number check for the fields.

What changed recently?

The rows for TW and +886 in our numbering-plan changes dataset, built from libphonenumber's release notes:

Change named in the release notes (2019-01-08 to 2026-09-23)Releases
Numbering-plan metadata (validation, lengths, types)4
Original-carrier prefix data3
Short numbers2
Geocoding (area names)2
All11

Latest numbering-plan updates for TW: 2026-04-22 (v9.0.29), 2019-11-26 (v8.11.0), 2019-08-01 (v8.10.16), 2019-04-15 (v8.10.10).

Taiwan's numbering metadata has been stable: after 2019, the only numbering-plan update for TW came in April 2026. The bigger changes were in the market and the law:

  • 2023: the two mergers cut the mobile network operators from five to three, without changing anyone's number.
  • 2024: the Fraud Crime Hazard Prevention Act (31 July), the registered-link rule for commercial SMS (18 November) and database-checked SIM applications (30 November).
  • 2025: the old 2003 portability rules were formally repealed (17 March), the government 111 SMS gained recipient digits and agency names (June), and the PDPA amendment was promulgated (11 November).
  • 2026: the fraud act was amended again (21 January). The PDPA amendment still waits for its start date.

What can MobileValidate check for Taiwanese numbers?

Generated from our public catalog:

Catalog data as of 2026-11-07.

CheckAccepts Taiwan numbersNotes
Format and country (every lookup)YesEach number is parsed first; an invalid number returns invalid_number and is never billed.
Carrier lookup (beta)YesLine 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)YesLive reachability, porting, roaming (true or false) and current network; unknown is free. Real time and bulk.
Number portability (MNP)YesPorted or not ported, and the current network code; unknown is free. Real time and bulk.
Spam reputationLimited accessAll countries except sanctioned ones; report coverage is strongest in North America and Europe.
Messaging appsYes: WhatsApp, Telegram, Viber*, Signal*, iMessage*, RCS*, LINE*, Zalo*, Botim*, Facebook Messenger*Registered, not registered or unknown; unknown is free.
Social networksYes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat*Not for Taiwan numbers: LinkedIn (US, IN only).
Online accounts (Apple, Amazon, Microsoft, Netflix)Yes: Apple, Amazon, Microsoft, NetflixRegistered, not registered or unknown; unknown is free.

* bulk jobs only. The live list is at GET /v1/services.

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

For Taiwanese numbers, the useful pair is an MNP lookup, which says whether a number has been ported and which network holds it now, and a live network status (HLR) check, which adds whether the number is reachable right now. The carrier lookup gives line type and current network in one call. For channels, LINE and the other starred checks run in bulk jobs; WhatsApp and Telegram also run in real time.

How do I start for free?

  • 20 free real checks. Every live account can run 20 phone numbers and 10 e-mail addresses through the real checks for free on the dashboard's Try it page. Use them on your own number first.
  • A free carrier lookup. The carrier lookup page has a public form for 3 lookups a day, no sign-up needed.
  • A free test key. Get a test key for the sandbox. It gives fixed test answers so you can build every branch of your code; see test mode.
  • A free estimate. POST /v1/jobs/estimate takes the same body as a job, checks nothing and shows the maximum cost before you start.
  • Then add credit. Create your account; approval is automatic. Top-ups of larger amounts get 5% to 10% bonus credit; see pricing. Unknown, invalid and duplicate results are never charged.

A bulk flow for a Taiwanese customer list

  1. Export the numbers you hold with consent or another lawful basis, one per row.
  2. Normalise them with normalize_tw(), or upload them as they are with default_country=TW, so 0912-XXX-XXX is read as Taiwanese.
  3. Run POST /v1/jobs/estimate with your checks, for example line and mnp, and read the per-country minimums in the breakdown.
  4. Start the job, then download the results as CSV or NDJSON.
Bulk LINE and porting check for a customer CSV
curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -F file=@customers.csv -F checks=line,mnp -F default_country=TW

For single numbers, here is a small porting check against the real-time endpoint. It uses the public sandbox key mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym and our test values. The sandbox accepts only those UK drama numbers, so the example uses them; with a live key, pass the output of normalize_tw().

tw_porting.py
import os

import requests  # pip install requests

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


def porting(numbers: list[str]) -> dict[str, tuple]:
    """Per E.164 number: (ported or not_ported, current network MCC-MNC). None means we don't know."""
    r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
                      json={"numbers": numbers, "checks": ["mnp"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        mnp = row["checks"]["number.mnp"]
        attrs = (mnp["attributes"] or {}) if mnp["status"] == "completed" else {}
        out[row["e164"]] = (attrs.get("porting"), attrs.get("mcc_mnc"))
    return out


for number, info in porting(["+447700900001", "+447700900003", "+447700900005"]).items():
    print(number, info)

We ran it against the sandbox on 2026-11-07. It printed:

Text
+447700900001 ('not_ported', '23415')
+447700900003 (None, None)
+447700900005 (None, None)

The second test value stands for a timeout and the third for an unsupported country; both come back as None, and neither would be billed. Keep None apart from "not ported": None means we don't know. Requests with 20 or more consecutive numbers are refused (403 suspected_enumeration), and our acceptable use policy forbids finding recipients for unsolicited messages. People can object through our opt-out form.

What are the key takeaways?

  • Taiwanese mobiles are 10 digits at home, 09 plus eight digits, and +886 plus nine digits in E.164. Store the E.164 form, without the 0.
  • 00 is not an exit code in Taiwan: rewrite 00886 to +886 before parsing. Reject 0969 (satellite), 099 (personal numbers), 070 (VoIP) and 0800 (toll-free) where you need a mobile.
  • The prefix shows the original block holder at most: porting has existed since 13 October 2005, and two 2023 mergers left three network operators.
  • Under the Fraud Crime Hazard Prevention Act, SIMs are issued against verified ID, and since 18 November 2024 commercial SMS with links or phone numbers is sent only if those are registered with the carrier.
  • Marketing must stop on objection and offer a free opt-out under the PDPA. The 2025 amendment and the new PDPC are coming, but as of November 2026 they aren't in force yet.
  • LINE is the main messenger, and our LINE check runs in bulk jobs only. Check registration only for customers you hold lawfully, and never treat registration as consent.

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

Sources

  1. Public Telecommunications Network Numbering Plan (公眾電信網路號碼計畫), current version as published by MODA (file dated July 2024) — Ministry of Digital Affairs (Taiwan), 2024
  2. Regulations on Number Portability Services of Telecommunications Enterprises (電信事業號碼可攜服務管理辦法), issued 2 July 2020 — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2020
  3. Regulations on Number Portability Services (號碼可攜服務管理辦法), 2003, repealed 17 March 2025: history — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2025
  4. Premier attends the launch of mobile number portability (13 October 2005) — Executive Yuan (Taiwan), 2005
  5. Telecom mergers take effect: what Taiwan Star and Asia Pacific Telecom users need to know (30 November 2023) — Central News Agency (Taiwan), 2023
  6. Fraud Crime Hazard Prevention Act (詐欺犯罪危害防制條例), promulgated 31 July 2024, amended 21 January 2026 — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2026
  7. Fraud Crime Hazard Prevention Act: legislative history and commencement of articles 19, 20, 22 and 24 (30 November 2024) — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2026
  8. NCC urges telecom operators to strengthen risk controls on commercial SMS (press release, 13 November 2024) — National Communications Commission, via the Executive Yuan, 2024
  9. Government 111 SMS upgraded: last three digits of the recipient's number and the agency's name (press release, 17 June 2025) — Ministry of Digital Affairs (Taiwan), 2025
  10. Personal Data Protection Act (個人資料保護法), as amended 11 November 2025 — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2025
  11. Personal Data Protection Act: legislative history (2025 amendment, commencement date to be set by the Executive Yuan) — Laws & Regulations Database of the Republic of China (Taiwan), Ministry of Justice, 2025
  12. FAQ: does calling the 165 anti-fraud hotline cost anything, and how else can I report fraud? — National Police Agency, Ministry of the Interior (Taiwan), 2026
  13. Continue to evolve without fearing failure: LINE Taiwan's key to success (26 February 2025) — LY Corporation, 2025
  14. libphonenumber PhoneNumberMetadata.xml (region TW) and carrier prefix data (886.txt) — libphonenumber project (Apache License 2.0), 2026

Frequently asked questions

How many digits is a Taiwan mobile number?

Ten digits when written at home, starting 09, for example 0912-XXX-XXX. In international form you drop the leading 0 and write +886 and nine digits, such as +886 912 XXX XXX. Landlines have nine or ten digits at home, depending on the area code, and eight or nine after +886.

What is the +886 country code and how do I write a Taiwan number for WhatsApp or LINE?

+886 is Taiwan's country calling code. Drop the leading 0 of the national number: 0912-345-678 becomes +886 912 345 678, stored as +886912345678. Don't keep the 0 after 886. The same E.164 form works for WhatsApp, LINE, SMS APIs and any other platform.

Can I tell the mobile operator from a 09 prefix?

No. The numbering plan gives each operator blocks inside 090 to 098, but mobile numbers have been portable since 13 October 2005, and in 2023 Taiwan Star merged into Taiwan Mobile and Asia Pacific Telecom into Far EasTone. A number keeps its digits through both. Look up the current network per number.

What are the area codes in Taiwan?

02 is Taipei, New Taipei and Keelung, with eight-digit local numbers. 03 covers Taoyuan, Hsinchu, Hualien and Yilan, 037 Miaoli, 04 Taichung and Changhua, 049 Nantou, 05 Chiayi and Yunlin, 06 Tainan and Penghu, 07 Kaohsiung, 08 Pingtung, 089 Taitung, 082 Kinmen, 0826 Wuqiu and 0836 Matsu. The 0 is dropped after +886.

What are 0800, 070, 099 and 0969 numbers in Taiwan?

0800 numbers are toll-free (the receiver pays), usually written 0800-XXX-XXX. 070 numbers are internet telephony numbers with 11 digits. 099 numbers are personal numbers that forward to another line. 0969 is reserved for satellite phones. None is an ordinary mobile, so don't accept them where you need a number for SMS or OTP.

What rules apply to business SMS in Taiwan?

Since 18 November 2024, carriers check every commercial SMS before sending under the Fraud Crime Hazard Prevention Act. A message with a link, short link or phone number is sent only if the business registered that link or number with the carrier in advance. Marketing also falls under the Personal Data Protection Act: stop when a person objects, and offer a free way to refuse in the first marketing message.

Can I check whether Taiwanese customers are on LINE?

Yes, in bulk jobs, for numbers you hold with a lawful basis such as your own customers. A MobileValidate LINE check answers registered, not registered or unknown with a checked_at date; unknown is never billed. It returns no name or profile, real-time LINE checks are not offered, and requests that look like scans of number ranges are refused.

All articles

Know before you send.

Create a free account: approved automatically, usually within 10–15 minutes.

Free to start: check 20 phone numbers and 10 e-mail addresses for real on your account, plus an unlimited test mode. You pay only for conclusive answers, from $20.