Guides

Thailand phone numbers: format, mobile prefixes, validation and messaging rules

Thailand phone number format: +66 and 10-digit mobiles (06, 08, 09), the 0066 parsing trap, tested code, porting, SIM identity rules and LINE checks.

By Published 17 min read

On this page

Thai numbers use the country code +66. Mobile numbers have 9 digits after the code and start with 6, 8 or 9, so they are ten digits at home (08X XXX XXXX) and +66 8X XXX XXXX in E.164. Write the international form with a plus, not as 0066: Thailand uses several exit codes (001, 006, 009 and others), so a parser set to Thailand reads "006" as one and rejects the number. Porting has run since December 2010, and SIM cards are tied to a verified identity.

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. We read the regulator notices, legal texts and press reports cited below between 2026-10-16 and 2026-10-18. Several Thai rules are published only in Thai; for those we relied on official translations, law-firm summaries or press reports and say so. This is a summary, not legal advice.

What does a Thai phone number look like?

A mobile number is 08X XXX XXXX at home: the trunk prefix 0, a two-digit prefix starting 6, 8 or 9, and seven subscriber digits. From abroad it is +66 8X XXX XXXX. Landlines are one digit shorter: 8 digits after +66, where the first one or two digits are the area code.

ItemValue
Country calling code+66
International call prefix (dialling out)00[1-9] (pattern: more than one prefix is used)
Trunk prefix (dialling at home)0
Mobile: digits after +669
Fixed line: digits after +668
Toll-free: digits after +6610, 13
Premium rate: digits after +6610
VoIP: digits after +669
Mobile, national format (masked)081 XXX XXXX
Mobile, international (masked)+66 81 XXX XXXX
Mobile, E.164 (masked)+6681XXXXXXX
Fixed line, national format (masked)010 XXX XXX
Fixed line, international (masked)+66 10 XXX XXX
Fixed line, E.164 (masked)+6610XXXXXX

The fixed-line example in the table is the first number libphonenumber's pattern accepts, not a typical landline. Real landlines look like this:

AreaNational format (masked)E.164 (masked)
Bangkok, Nonthaburi, Pathum Thani, Samut Prakan02 XXX XXXX+662XXXXXXX
Chiang Mai and the upper north (053)053 XXX XXX+6653XXXXXX
Chon Buri, Rayong, Chachoengsao (038)038 XXX XXX+6638XXXXXX
Phuket and Phang Nga (076)076 XXX XXX+6676XXXXXX
Khon Kaen and neighbouring provinces (043)043 XXX XXX+6643XXXXXX

Area names come from libphonenumber's geocoding data. The area code is part of the number and is always dialled, even for a call within the same province.

Why do Thai numbers written as 0066… fail validation?

Because Thailand has several international exit codes, not one. The metadata defines the exit code as 00 followed by any digit from 1 to 9, and operators really do use several of them: the carrier selection codes include 001, 003, 004, 005, 006 and 009, each tied to an international carrier (Telephone numbers in Thailand, citing the NBTC numbering database). 006 is one of them. A parser that is told the number comes from Thailand therefore reads 0066 81 XXX XXXX as exit code 006, then country code 68…, and the result is not a Thai number at all. We confirmed this with both libphonenumber ports we test (row 3 of the test table below).

The fix is one line: rewrite a leading 0066 to +66 before parsing. Inputs that use a real Thai exit code, such as 001 66 81 XXX XXXX, already parse correctly. And as everywhere, store only the E.164 form, +6681XXXXXXX, with no spaces and no 0 after the country code.

A card shows +66 and a ten-digit Thai mobile as circles, with prefixes 06, 08 and 09 feeding the highlighted prefix; a crossed-out 0066 turns into a ticked +66. Small cards show porting, a SIM with ID card, and yes/no/unknown.A card shows +66 and a ten-digit Thai mobile as circles, with prefixes 06, 08 and 09 feeding the highlighted prefix; a crossed-out 0066 turns into a ticked +66. Small cards show porting, a SIM with ID card, and yes/no/unknown.
A Thai mobile is +66 plus nine digits starting 6, 8 or 9; write it with a plus, never as 0066.

Which prefixes are mobile numbers?

Mobile numbers start 06, 08 or 09. For each 2-digit block, the generator counted every 9-digit number that libphonenumber's mobile pattern for TH accepts:

National prefixInternationalShare of the block that is mobile (9-digit numbers)3-digit sub-blocks that aren't fully mobile
0AA, for 27 blocks AA = 14, 61–66, 80–89, 90–99+66 AA100%—
067+66 6719.0%not mobile: 0670, 0674–0679; partly mobile: 0671 (90.0%), 0672 (40.0%), 0673 (60.0%)

Three details matter:

  • 080–089 and 090–099 are fully mobile. The 09 range was opened after 08 filled up.
  • 06 is mixed. 061–066 are mobile, 067 is only partly allocated, and 060 and 068 are VoIP ranges, typed VOIP in the metadata (row 10 of the test table). A VoIP number has the same shape as a mobile, so a regex can't tell them apart.
  • 014 is an oddity. The metadata treats it as a mobile block, but we found no allocation notice from the regulator that explains it, so the code below accepts only 06, 08 and 09, like our other guides do for unexplained blocks.

Which operator holds each prefix?

In Thailand the two-digit prefix doesn't identify the operator. Each block is split between operators at the third or fourth digit, so 081, 089 or 095 can each belong to several. A few examples from libphonenumber's carrier prefix file (66.txt), which still uses the brand names of the time the ranges were assigned:

Example sub-blocks (national)Name in the carrier fileRange holder today
0811, 0818, 0901, 0981AISAIS (Advanced Info Service)
0825, 0835, 0918, 0961True MoveTrue Corporation (TrueMove H brand)
0805, 0831, 0911, 0991DTACTrue Corporation (dtac brand)
0905, 0975TOT MobileNational Telecom (NT)
0641Penguin SIMMobile virtual network operator

Two mergers explain the right-hand column. dtac and True completed their amalgamation on 1 March 2023 into True Corporation Public Company Limited (True Corporation, 2023). The two state-owned operators, TOT and CAT Telecom, were merged into National Telecom (NT) in January 2021 (The Nation via Open Development Thailand, 2020). So "DTAC" in the carrier file today means a True Corporation range, and a lookup that returns "TOT" is describing the original holder.

Porting changes the picture further: none of this tells you today's network. Read the table as "who holds the range" and look the number up when the network matters.

How do I validate a Thai number in code?

Remove spaces and punctuation, rewrite 0066 to +66, parse with full metadata and the default region TH, and keep only mobiles.

Python (pip install phonenumbers):

Python
import re

import phonenumbers


def normalize_th(raw: str) -> str | None:
    """E.164 for a Thai mobile number, or None."""
    s = re.sub(r"[\s().-]", "", raw)
    # "0066..." means +66, but Thailand has several exit codes (001, 006, 009 ...),
    # so a parser with region TH reads "006" as an exit code. Rewrite it first.
    s = re.sub(r"^0066", "+66", s)
    try:
        n = phonenumbers.parse(s, "TH")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "TH"
            or phonenumbers.number_type(n) != phonenumbers.PhoneNumberType.MOBILE):
        return None
    e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
    return e164 if e164[3] in "689" else None  # 06, 08, 09 only, see the prefix table

JavaScript (npm install libphonenumber-js):

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

/** "081 234 5678", "+66 81 …", "0066 81 …" or "+66 081 …" → E.164 for a Thai mobile number, or null. */
export function normalizeTh(raw) {
  // "0066…" means +66, but Thailand has several exit codes (001, 006, 009 …), so region TH reads "006" as one.
  const input = String(raw).replace(/[\s().-]/g, "").replace(/^0066/, "+66");
  const phone = parsePhoneNumberFromString(input, "TH");
  return phone?.isValid() && phone.country === "TH" && phone.getType() === "MOBILE" && /^\+66[689]/.test(phone.number)
    ? phone.number : null;
}

We ran both on 2026-10-18 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). Both returned an E.164 number for rows 1 to 5 below, including row 3, and nothing for rows 6 to 10. They also agreed on inputs outside the table: +66 08… with the stray 0, 66 8… without a plus and 001 66 8… with a Thai exit code all became the right E.164 number, while 014… and 068… numbers were rejected. The libphonenumber column shows what the library makes of each input on its own, without our two extra rules. The shape regex column tests the pattern most tutorials give, after spaces, dashes and brackets are removed:

#CaseInput (masked)Shape regex ^(?:\+66|0066|0)?[1689]\d{8}$libphonenumber (TH)
1National, with trunk prefix081 XXX XXXXpassesvalid, MOBILE
2International, with spaces+66 81 XXX XXXXpassesvalid, MOBILE
3International dialling prefix 000066 81 XXX XXXXpassesinvalid
4E.164+6681XXXXXXXpassesvalid, MOBILE
5Dashes and brackets(081) XXX-XXXXpassesvalid, MOBILE
6One digit short081XXXXXXfailsinvalid
7One digit too many081XXXXXXXXfailsinvalid
8Mobile shape, unused block 010010XXXXXXXpassesinvalid
9Fixed line010 XXX XXXfailsvalid, FIXED_LINE
10VoIP range060 XXX XXXXpassesvalid, VOIP

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

  1. Row 3: 0066 passes the regex, but libphonenumber on its own rejects it for the exit-code reason above. Without the rewrite you lose real customers.
  2. Row 8: 010 is shaped like a mobile number and passes the regex, but no mobile range starts there, so an OTP sent to it is wasted.
  3. Row 10: 060 passes the regex and libphonenumber says it is valid, but as VOIP, not MOBILE. If your sign-up flow only wants mobiles, check the type, not just validity.

Our post on why an E.164 regex is not enough shows the same problem in other countries, and our Python and JavaScript guides cover more languages. For VoIP numbers at sign-up, see VoIP number detection.

Does number portability change the carrier?

Yes. Mobile number portability (MNP) took effect on 5 December 2010. At first it was limited to Bangkok and to 100 numbers a day per operator, with a fee of THB 99, and full nationwide availability followed in January 2011 (Kasikorn Research Center, 2010). New rules from the National Broadcasting and Telecommunications Commission (NBTC), which The Nation reported on 17 January 2017 as taking effect that week, require operators to complete a transfer in two days instead of three and put the fee at THB 29 (The Nation, 2017). The current NBTC notification on mobile number portability, dated 6 September 2021 and published in the Royal Gazette on 23 September 2021, keeps the limit at two working days, counted from a complete and verified request (Royal Gazette, 2021).

The Thailand row of our MNP atlas:

ItemValue
Mobile number portabilityYes
Mobile porting since2010-12-05
Maximum porting time2 working days
Governing ruleNBTC Notification on Criteria for Mobile Number Portability (6 Sep 2021), clause 10
Published porting volumenone published
Sourceweb.archive.org, kasikornresearch.com
Checked2026-10-19

The 2021 notification replaced the 2009 and 2010 rules, which allowed three working days. Our MNP atlas compares Thailand with other countries. For routing, pricing or fraud rules, look up the current network per number instead of reading the prefix. Our SMS routing with MNP and HLR use case shows where that pays off.

How are SIM subscribers identified?

Every SIM card is registered to a person, and since 2023 the rules have been tightened again and again to fight phone scams.

DateRuleWhat it means for you
17 March 2023Emergency Decree on technological crimes in forceLending your mobile number to someone else, knowing it will be used for crime, can bring up to 3 years in prison or a THB 300,000 fine (section 9). Trading SIMs registered to someone who can't be identified: 2 to 5 years or up to THB 500,000 (section 11)
January 2024People with more than five SIMs per operator must confirm their identityThose with more than 100 had until 14 February 2024, those with 6 to 100 until 13 July 2024. After the deadline outgoing calls and SMS were suspended, then the SIM was terminated
13 April 2025Amendment to the Emergency DecreeTelecom providers must screen for content linked to technology crime and suspend SIM cards when the NBTC orders it
16 May 2026NBTC notification No. 2 on technology crimePeople without Thai nationality: at most three SIMs per person per operator, in-person registration, mainly with a passport. Every user must activate a registered SIM within 60 days

Sources: the decree's official English translation (MDES, 2023), Pattaya Mail's report of the NBTC's statements (2024) and Tilleke & Gibbins' summaries of the 2025 amendment (2025) and the 2026 notification (2026). By the end of June 2024, according to the NBTC, only 1,635,407 of the 3,981,251 SIMs affected by the five-SIM rule had been verified, and more than a million SIMs in the over-100 group had already been suspended in February.

Two consequences for businesses:

  • Shared liability. Under the decree as amended, banks, payment providers, mobile network operators and other service providers are jointly responsible for losses from technological crimes unless they show they met their regulators' standards (Baker McKenzie, 2025). Expect Thai banks and fintechs to ask more of the phone numbers they rely on for OTPs.
  • Suspended outgoing service. A number whose owner missed a verification deadline can lose outgoing calls and SMS first. It may still receive your OTP and look normal to you, while the customer can't reply or call back. Our SIM swap signals post covers the checks that do point to fraud.

What is the +697 prefix on calls in Thailand?

It marks an incoming call that arrived over internet telephony. In July 2022 the Ministry of Digital Economy and Society said call-centre scammers favour these numbers because they don't have to be registered, and that the NBTC had ordered operators to add +697 to incoming IP calls so people can spot them (The Nation, 2022). Police advice repeated in September 2024 is to reject calls from abroad starting +697 or +698 and to treat +66 calls made over VoIP with suspicion (PRD, 2024). +697 is not a country code and never belongs in a phone field: if one reaches your database, it came from a caller ID, not from a customer.

Which messaging apps and channels reach people?

SMS reaches every active mobile. Among messaging apps, LINE is the one most Thai businesses build on: in August 2026 LINE Thailand disclosed 56 million users in the country and more than 12 billion conversations with LINE Official Accounts during 2025 (Relevant Audience, reporting LINE's disclosure, 2026). Those are the company's own figures, not an independent measurement, so we don't quote market shares for LINE, WhatsApp, Facebook Messenger or Telegram.

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 LINE, Zalo and Botim guide explains how much weight a "not registered" answer carries on LINE, where people also connect by ID and QR code, and our channel-by-country guide shows the method.

How do I check LINE, WhatsApp or Telegram registration for Thai customers?

Normalise every row first, then run the checks you need per number. The LINE check runs in bulk jobs only; the WhatsApp check and the Telegram check run in real time and in bulk. 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 an account at checked_atOffer that app to customers who opted in to it
registered: falseNo account found at checked_atUse SMS or another channel; for LINE, also offer your Official Account's QR code
unknownNo conclusive answer (not billed)Keep the current channel; retry later
invalid_numberFailed format validation (not billed)Fix the data at the source, starting with 0066 and VoIP numbers

For a few numbers at a time, use a real-time lookup. This one uses the public sandbox key mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym and our test values; the sandbox accepts only those UK drama numbers. With a live key, pass the output of normalize_th():

th_channels.py
import os

import requests  # pip install requests

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


def channels(numbers: list[str]) -> dict[str, dict]:
    """WhatsApp and Telegram registration per number. None means we don't know."""
    r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
                      json={"numbers": numbers, "checks": ["whatsapp", "telegram"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        out[row["e164"]] = {
            name: (c["registered"] if c["status"] == "completed" else None)
            for name, c in (("whatsapp", row["checks"]["whatsapp.registered"]), ("telegram", row["checks"]["telegram.registered"]))
        }
    return out


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

What the test values return (we ran it against the sandbox on 2026-10-18):

Test valuewhatsapptelegram
+447700900001TrueTrue
+447700900002FalseFalse
+447700900005None (unsupported_country)None (unsupported_country)

For lists, and for LINE, use a bulk job with a CSV whose numbers are written nationally and default_country=TH:

Bulk LINE and WhatsApp 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,whatsapp -F default_country=TH

Two pricing rules apply to Thai lists. LINE is a bulk-only check, so each country in a job is charged at least the price of 500 LINE checks. WhatsApp checks get the bulk price only for groups of at least 132 numbers from the same country in one job. Collect a day's Thai numbers into one job, and send the same body to POST /v1/jobs/estimate first: it is free and shows the maximum cost before anything runs. Unknown or inconclusive results are never charged; see current prices. Rewrite 0066 numbers before uploading, because a CSV written that way can come back as invalid_number.

Use these checks only for numbers you hold lawfully, such as customers and sign-ups. 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. Our consent guide covers the legal basis in more detail.

What are the rules for SMS, calls and personal data?

These summarise the texts and commentary as we read them between 2026-10-16 and 2026-10-18. Thailand has no single anti-spam law; the rules for marketing messages come from the data protection law, the direct marketing law and the NBTC. Not legal advice; ask local counsel how they apply to you.

RuleRequirementSource
Consent to marketing (PDPA)A phone number is personal data. Get consent before marketing to consumers by SMS or phone, in writing or electronically, separate from other terms; withdrawal must be as easy as giving itPersonal Data Protection Act B.E. 2562, in full force since 1 June 2022 (Linklaters)
ObjectionPeople can object to direct marketing at any timePDPA
RegistrationDirect marketing operators must register with the Office of the Consumer Protection Board (OCPB)Direct Sales and Direct Marketing Act, section 27 (Formichella & Sritawat)
No disturbanceMarketing calls must not disturb consumers; adverts must not be false or misleadingConsumer Protection Act, section 23
Opt-out from SMSSubscribers of every network can stop unwanted SMS free of charge by dialling *137NBTC and operators, since March 2014 (Siamphone)

Penalties are significant: under the PDPA, administrative fines of up to THB 5 million, plus criminal penalties and punitive damages; operating direct marketing without registration can bring up to one year in prison or a THB 100,000 fine.

What that means for OTP

A one-time passcode the user asked for isn't marketing, but it travels on the same routes and is filtered by the same operators. Keep OTP messages free of offers, send them under a stable sender name, and don't reuse numbers collected for verification for marketing without separate consent. A customer who dialled *137 to stop promotional SMS may also filter more than you expect, so monitor delivery per operator.

Personal data checks

A registration check on a customer's number is processing of personal data under the PDPA. Record why you run it, keep only the answer you need, and honour objections. Our privacy checklist lists the steps, and is a phone number personal data? explains why the answer is almost always yes.

What changed recently?

The rows for TH and +66 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)6
Short numbers3
Original-carrier prefix data2
Alternate formatting1
Geocoding (area names)1
All13

Latest numbering-plan updates for TH: 2026-04-22 (v9.0.29), 2024-01-24 (v8.13.29), 2021-11-25 (v8.12.38), 2021-09-22 (v8.12.33), 2021-01-12 (v8.12.16).

Thailand's numbering metadata changes less often than Vietnam's or Malaysia's, but the April 2026 update shows it still moves, so keep your library current. Beyond numbering, the changes that matter are the SIM identity rules: the five-SIM verification of 2024, the 2025 amendment of the Emergency Decree and the NBTC notification of May 2026.

What can MobileValidate check for Thai numbers?

Generated from our public catalog:

CheckAccepts Thailand 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 Thailand 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. Catalog as fetched on 2026-10-19; the live list is at GET /v1/services.

A lookup returns network and registration facts. It never returns a subscriber's name, ID card number or address, and we don't offer "number details" searches. See MNP lookup, HLR lookup and carrier lookup for the network fields.

What are the key takeaways?

  • Thai mobiles are +66 plus nine digits starting 6, 8 or 9, 0XX XXX XXXX at home; store the E.164 form and strip a stray 0 after +66.
  • Rewrite 0066 to +66 before parsing: Thailand has several exit codes (001, 006, 009 …), so a parser set to Thailand misreads 0066.
  • 060 and 068 are VoIP, not mobile; check the number type, not just validity.
  • The prefix names the range holder (AIS, True Corporation, NT or an MVNO), not the current network: porting has run since December 2010, with a two-day transfer since 2017.
  • SIMs are tied to verified identities, with caps and deadlines added in 2024 and 2026; marketing SMS needs PDPA consent, and subscribers can stop unwanted SMS with *137.
  • Check LINE, WhatsApp or Telegram registration only for customers you hold lawfully, keep unknown apart from false, and never treat registration as consent.

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

Sources

  1. libphonenumber PhoneNumberMetadata.xml (region TH) and carrier prefix data (66.txt) — libphonenumber project (Apache License 2.0), 2026
  2. Telephone numbers in Thailand (carrier selection codes, citing the NBTC numbering database) — Wikipedia, 2026
  3. Mobile Number Portability: New Marketing Strategies for Service Differentiation Needed (Business Brief No. 3002, 3 December 2010) — Kasikorn Research Center, 2010
  4. Number portability service approved (17 January 2017) — The Nation, 2017
  5. NBTC Notification on Criteria for Mobile Number Portability (6 September 2021), Royal Gazette vol. 138, special part 229 Ng (archived copy) — National Broadcasting and Telecommunications Commission (NBTC) / Royal Gazette, 2021
  6. dtac and True have completed their amalgamation process (1 March 2023) — True Corporation, 2023
  7. CAT, TOT merger to be completed by January 7 (14 December 2020, from The Nation) — Open Development Thailand, 2020
  8. Final warning for holders of six to 100 SIM cards to confirm identities by July 13 (11 July 2024) — Pattaya Mail, 2024
  9. Thailand Tightens Telecom Registration, Data, and IP Address Rules to Combat Tech Crime (19 May 2026) — Tilleke & Gibbins, 2026
  10. Emergency Decree on Measures for the Prevention and Suppression of Technological Crimes, B.E. 2566 (2023), unofficial translation — Ministry of Digital Economy and Society of Thailand (translation for the Office of the Council of State), 2023
  11. Thailand Amends Emergency Decree on Technology Crime (18 April 2025) — Tilleke & Gibbins, 2025
  12. Thailand: SEC sets new standards against mule accounts (22 August 2025) — Baker McKenzie, 2025
  13. Phone lines with '+697' prefix too dangerous to be answered: DES (3 July 2022) — The Nation, 2022
  14. Scam alert! Do not answer calls that begin with +697, +698, or +66 (27 September 2024) — Government Public Relations Department of Thailand, 2024
  15. กสทช. เปิดช่องทาง *137 ยกเลิก SMS รบกวน (6 March 2014) — Siamphone, 2014
  16. Data Protected – Thailand (last updated June 2026) — Linklaters, 2026
  17. E-Commerce Law (Direct Sales and Marketing Act, Consumer Protection Act and Personal Data Act): Thailand, Part 3 — Formichella & Sritawat (via Mondaq), 2023
  18. LINE Thailand puts 56 million users and 12 billion Official Account conversations behind its 2026 business stack (12 August 2026) — Relevant Audience (reporting LINE Thailand's disclosure via Marketing Oops), 2026

Frequently asked questions

How many digits is a Thai mobile number?

Nine digits after the country code +66, or ten when written nationally with the leading 0: 08X XXX XXXX at home and +66 8X XXX XXXX in E.164. Mobile numbers start 06, 08 or 09. Bangkok landlines are shorter: 02 XXX XXXX nationally, 8 digits after +66.

What is the Thailand country code for WhatsApp, LINE and international calls?

+66. Drop the leading 0 of the national number: 081 XXX XXXX becomes +66 81 XXX XXXX. Don't keep the 0 after the code (+66 081…), and don't store the number as 0066…: Thailand uses several exit codes (001, 006, 009 and others), so a parser set to Thailand reads 006 as an exit code and rejects the number.

Why does my validator reject a Thai number written as 0066…?

Because 00 followed by a digit is a Thai international exit code (for example 001 or 009), not a plain 00. libphonenumber with the default region TH reads '0066 81…' as exit code 006 followed by country code 68, so the number fails. Rewrite a leading 0066 to +66 before parsing, as the code in this guide does.

Can a Thai mobile number keep its digits after changing operator?

Yes. Mobile number portability started on 5 December 2010, at first limited to Bangkok and 100 numbers a day per operator, and became available nationwide in January 2011. Rules that took effect in January 2017 require operators to complete a transfer in two days. Because of porting, the prefix only shows which operator holds the range, not the current network.

How many SIM cards can one person have in Thailand?

Since January 2024, anyone holding more than five SIM cards with one operator had to confirm their identity or lose outgoing calls and SMS. Under an NBTC notification in force since 16 May 2026, people without Thai nationality may hold at most three SIM cards per operator, must register in person, mainly with a passport, and every user must activate a registered SIM within 60 days.

Can I check whether Thai customers are on LINE or WhatsApp?

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

All articles

Know before you send.

Get a free test key in a minute. Live access is approved automatically, usually within 10–15 minutes.