On this page
Indian phone numbers use the country code +91 followed by 10 digits, for mobiles and landlines alike. Ordinary mobiles start with 6, 7, 8 or 9, so in E.164 a mobile looks like +91 81XXX XXXXX (12 digits without the plus). The first digits don't show the current operator, because numbers have been portable since 2011. Commercial SMS must go through TRAI's DLT registration.
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 Telecom Regulatory Authority of India (TRAI) documents listed under Sources on 2026-11-03. If you only need validation code for a sign-up form, our developer post on validating Indian mobile numbers in code goes deeper on regex, PHP and C#. This is a summary, not legal advice.
What does an Indian phone number look like?
A mobile number is 10 digits, written 81XXX XXXXX at home, sometimes with a trunk 0 in front (081XXX XXXXX). From abroad it is +91 81XXX XXXXX, or 0091 81XXX XXXXX with India's international dialling prefix. India's National Numbering Plan 2003, published by the Department of Telecommunications (DoT), fixed the national number at 10 digits for mobile and fixed-line services (ITU list of national numbering plans, India). A landline is a 2- to 4-digit area code (the plan calls it the SDCA code) plus the subscriber number, again 10 digits in total.
| Item | Value |
|---|---|
| Country calling code | +91 |
| International call prefix (dialling out) | 00 |
| Trunk prefix (dialling at home) | 0 |
| Mobile: digits after +91 | 10 |
| Fixed line: digits after +91 | 10 |
| Toll-free: digits after +91 | 8–13 |
| Premium rate: digits after +91 | 13 |
| Shared cost: digits after +91 | 11 |
| Universal access (UAN): digits after +91 | 10 |
| Mobile, national format (masked) | 081XXX XXXXX |
| Mobile, international (masked) | +91 81XXX XXXXX |
| Mobile, E.164 (masked) | +9181XXXXXXXX |
| Fixed line, national format (masked) | 011 XXXX XXXX |
| Fixed line, international (masked) | +91 11 XXXX XXXX |
| Fixed line, E.164 (masked) | +9111XXXXXXXX |
Store only the E.164 form: +91 and the 10 digits, no spaces. Indian forms often collect numbers as 9XXXXXXXXX, 09XXXXXXXXX, 919XXXXXXXXX without a plus, or typed in Devanagari digits (९८…). A numbering-plan library with the default region IN turns most of these into +91…; the Devanagari digits need one extra step in JavaScript, shown below.
How many digits does an Indian number have?
| Number | Digits after +91 | Example (masked) |
|---|---|---|
| Mobile | 10 | +91 81XXX XXXXX |
| Landline | 10 (area code + subscriber number) | +91 11 XXXX XXXX (Delhi) |
| Toll-free (1800) | 8 to 13 in libphonenumber's metadata | 1800 XXX XXXX |
| 140 promotional and 1600/1601 service call series | 10 | 140X XXX XXX, 1600 XXX XXX |
| Machine-to-machine (M2M) SIMs | 13 for the dedicated M2M series | not dialled by people |
The last row matters if you handle IoT devices. TRAI has asked DoT to move all SIM-based M2M connections that still use 10-digit mobile numbers to the 13-digit M2M series "at the earliest" (TRAI recommendations, 2025, para 3.11). A 13-digit Indian number is therefore not necessarily a typo, but it isn't a person's phone either.
Which prefixes are mobile numbers?
Every ordinary mobile starts with 6, 7, 8 or 9. For each two-digit block, the generator counted every 10-digit number that libphonenumber's mobile pattern for IN accepts. The "National prefix" column uses the optional trunk 0:
| National prefix | International | Share of the block that is mobile (10-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
016 | +91 16 | 2.0% | not mobile: 0161–0169; partly mobile: 0160 (20.0%) |
0AA, for 17 blocks AA = 60, 69, 70, 72, 74, 84, 85, 90–99 | +91 AA | 100% | — |
061 | +91 61 | 70.1% | partly mobile: 0611 (40.0%), 0612 (41.0%), 0613 (40.0%), 0615 (40.0%), 0618 (40.0%) |
062 | +91 62 | 70.0% | partly mobile: 0621 (40.0%), 0622 (40.0%), 0624 (40.0%), 0625 (40.0%), 0627 (40.0%) |
063 | +91 63 | 76.0% | partly mobile: 0631 (40.0%), 0632 (40.0%), 0633 (40.0%), 0634 (40.0%) |
064 | +91 64 | 64.0% | partly mobile: 0641 (40.0%), 0642 (40.0%), 0643 (40.0%), 0645 (40.0%), 0646 (40.0%), 0647 (40.0%) |
065 | +91 65 | 46.0% | partly mobile: 0651 (40.0%), 0652 (40.0%), 0653 (40.0%), 0654 (40.0%), 0655 (40.0%), 0656 (40.0%), 0657 (40.0%), 0658 (40.0%), 0659 (40.0%) |
066 | +91 66 | 58.0% | partly mobile: 0661 (40.0%), 0662 (40.0%), 0663 (40.0%), 0664 (40.0%), 0665 (40.0%), 0667 (40.0%), 0668 (40.0%) |
067 | +91 67 | 50.2% | partly mobile: 0671 (40.0%), 0672 (40.0%), 0673 (40.0%), 0674 (16.0%), 0675 (40.0%), 0676 (40.0%), 0678 (46.0%), 0679 (40.0%) |
068 | +91 68 | 54.1% | not mobile: 0683; partly mobile: 0680 (40.0%), 0681 (40.0%), 0682 (41.0%), 0684 (40.0%), 0685 (40.0%), 0686 (40.0%) |
071 | +91 71 | 43.6% | partly mobile: 0710 (40.0%), 0711 (40.0%), 0712 (40.0%), 0713 (40.0%), 0714 (40.0%), 0715 (40.0%), 0716 (40.0%), 0717 (40.0%), 0718 (40.0%), 0719 (76.0%) |
073 | +91 73 | 78.8% | partly mobile: 0731 (48.0%), 0732 (64.0%), 0733 (50.0%), 0734 (50.0%), 0739 (76.0%) |
075 | +91 75 | 84.0% | partly mobile: 0751 (50.0%), 0752 (82.0%), 0755 (50.0%), 0759 (58.0%) |
076 | +91 76 | 77.2% | partly mobile: 0760 (76.0%), 0761 (70.0%), 0762 (70.0%), 0763 (52.0%), 0764 (40.0%), 0765 (64.0%) |
077 | +91 77 | 96.4% | partly mobile: 0770 (64.0%) |
078 | +91 78 | 94.3% | partly mobile: 0788 (43.0%) |
079 | +91 79 | 40.1% | not mobile: 0791, 0792, 0794–0796; partly mobile: 0793 (1.0%) |
080 | +91 80 | 60.7% | not mobile: 0802–0804; partly mobile: 0806 (20.0%), 0807 (87.0%) |
081 | +91 81 | 94.8% | partly mobile: 0816 (48.0%) |
082 | +91 82 | 84.4% | partly mobile: 0820 (48.0%), 0821 (48.0%), 0824 (48.0%) |
083 | +91 83 | 84.4% | partly mobile: 0831 (48.0%), 0832 (48.0%), 0836 (48.0%) |
086 | +91 86 | 84.4% | partly mobile: 0861 (48.0%), 0863 (48.0%), 0866 (48.0%) |
087 | +91 87 | 84.6% | partly mobile: 0870 (50.0%), 0877 (48.0%), 0878 (48.0%) |
088 | +91 88 | 90.6% | partly mobile: 0883 (48.0%), 0884 (58.0%) |
089 | +91 89 | 95.8% | partly mobile: 0891 (58.0%) |
Three things stand out:
- Seventeen blocks are fully mobile:
60,69,70,72,74,84,85and90to99. Any valid 10-digit number there is a mobile. - Many 6, 7 and 8 blocks are shared with landlines. Area codes such as Bengaluru's
80sit inside the same digit space, which is why0802to0804show as "not mobile". A rule like "starts with 6 to 9 means mobile" accepts some landlines. Our developer post measures how many. - The
016row is the 1600 and 1601 call series, which the metadata types as mobile. They are explained in the next section.
Which operator holds a prefix?
DoT allocates mobile number blocks to operators by licensed service area (a state or a group of states, called an LSA or "circle"). The same leading digits can belong to different operators in different circles, and a ported number keeps its digits on a new network. We found no current public DoT list mapping every block to an operator. So we don't publish a "98XXX means operator A" table: it would be wrong for millions of numbers. What TRAI does publish is how many mobile subscriptions each operator has (TRAI PR 140/2026, Annexure II):
| Operator | Wireless (mobile) subscriptions, 30 September 2026 |
|---|---|
| Reliance Jio | 511.14 million |
| Bharti Airtel | 494.29 million |
| Vodafone Idea | 200.12 million |
| BSNL | 94.30 million |
| MTNL | 0.15 million |
| All operators | 1,300.00 million |
These figures include machine-to-machine SIMs. On the date of peak network activity in September 2026, 1,212.80 million wireless subscribers were active. To learn the operator of one number today, look it up: our MNP lookup returns ported or not ported and the current network code.
What are 140, 1600 and 1601 numbers?
They are number series reserved for commercial calls, so people can tell a bank's service call from a sales call:
| Series | Used for | Source |
|---|---|---|
140 | Promotional calls, which follow people's do-not-disturb preferences | TRAI PR 91/2026 |
1600 | Service and transactional calls from entities regulated by RBI, SEBI, IRDAI and PFRDA, and from government bodies | TRAI PR 135/2025, PR 91/2026 |
1601 | Service and transactional calls from other sectors, starting with utilities and courier and logistics firms in August 2026 | TRAI PR 113/2026 |
For number handling, two points matter. People don't sign up with these numbers, so a sign-up form may reject them (the code below does). But if you process caller IDs or call logs, a ^[6-9] rule silently drops them. TRAI's September 2026 amendment also bars call management apps from blanket-blocking or spam-tagging these series (TRAI PR 119/2026). Our guide to TRAI's 2026 anti-spam rules covers the amendment, its dates and the sender checklist.
How do I validate an Indian number in code?
Use a libphonenumber port with full metadata and the default region IN, then keep only mobiles that start with 6 to 9. Treat FIXED_LINE_OR_MOBILE as a possible mobile: the metadata can't tell the two apart in shared blocks.
Python (pip install phonenumbers):
import phonenumbers
from phonenumbers import PhoneNumberType as T
SIGNUP_TYPES = {T.MOBILE, T.FIXED_LINE_OR_MOBILE}
def normalize_in(raw: str) -> str | None:
"""E.164 for an Indian mobile a person can sign up with, or None."""
try:
n = phonenumbers.parse(raw, "IN")
except phonenumbers.NumberParseException:
return None
if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "IN"
or phonenumbers.number_type(n) not in SIGNUP_TYPES):
return None
e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
return e164 if e164[3] in "6789" else None # drops the 1600/1601 call seriesJavaScript (npm install libphonenumber-js):
import { parsePhoneNumberFromString } from "libphonenumber-js/max";
const SIGNUP_TYPES = new Set(["MOBILE", "FIXED_LINE_OR_MOBILE"]);
/** "081234 56789", "+91 …", "0091 …", "91…" or Devanagari digits → E.164 for a 6–9 mobile, or null. */
export function normalizeIn(raw) {
const ascii = String(raw).replace(/[०-९]/g, (d) => String(d.charCodeAt(0) - 0x0966)); // ०–९ → 0–9
const phone = parsePhoneNumberFromString(ascii, "IN");
return phone?.isValid() && phone.country === "IN" && SIGNUP_TYPES.has(phone.getType()) && /^\+91[6-9]/.test(phone.number)
? phone.number : null;
}We ran both on 2026-11-03 (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 and nothing for rows 6 to 10. Both also accepted 91 plus 10 digits without a plus, returned nothing for a 1600 number and for a US number, and gave the same answer for a number typed in Devanagari digits, but only after the conversion line in JavaScript: without it, libphonenumber-js returned nothing. The shape regex column tests a pattern derived from the metadata, after spaces, dashes and brackets are removed:
| # | Case | Input (masked) | Shape regex ^(?:\+91|0091|0)?[16-9]\d{9}$ | libphonenumber (IN) |
|---|---|---|---|---|
| 1 | National, with trunk prefix | 081XXX XXXXX | passes | valid, MOBILE |
| 2 | International, with spaces | +91 81XXX XXXXX | passes | valid, MOBILE |
| 3 | International dialling prefix 00 | 0091 81XXX XXXXX | passes | valid, MOBILE |
| 4 | E.164 | +9181XXXXXXXX | passes | valid, MOBILE |
| 5 | Dashes and brackets | (081XXX) XXXXX | passes | valid, MOBILE |
| 6 | One digit short | 081XXXXXXX | fails | invalid |
| 7 | One digit too many | 081XXXXXXXXX | fails | invalid |
| 8 | Mobile shape, unused block 010 | 010XXXXXXXX | passes | invalid |
| 9 | Fixed line | 011 XXXX XXXX | passes | valid, FIXED_LINE |
| 10 | Universal access (UAN) range | 14X XXX XXXX | passes | valid, UAN |
Row 8 is the one to remember: 010 has the right length and passes the regex, but it isn't a valid range, so an OTP sent to it is wasted. Rows 9 and 10 pass this regex too, because it has to allow the leading 1 of the 1600 series. The popular ^[6-9]\d{9}$ has the opposite problem; our developer post shows what it accepts and rejects, with PHP and C# versions. For more languages, see our Python and JavaScript guides.
Does number portability change the carrier?
Yes. Mobile number portability (MNP) began in the Haryana service area on 25 November 2010 and across the rest of India on 20 January 2011. At first it worked only within one service area; porting between service areas followed nationwide on 3 July 2015 (TRAI PR 140/2026). The rules, as of November 2026:
- Mobile to mobile. The regulations define portability as keeping a mobile number when moving between operators or mobile technologies (MNP Regulations, 2009, regulation 2). Landline numbers aren't covered.
- 90-day wait. A number can be ported once 90 days have passed since activation or since its last port.
- Unique porting code (UPC). The subscriber texts
PORTand the 10-digit number to 1900 and receives an eight-character code, valid for 4 days (30 days in Jammu & Kashmir, Assam and the North East) (TRAI MNP FAQ). - No port right after a SIM swap. Since 1 July 2024, no UPC is issued within 7 days of a SIM swap or replacement, to stop fraudsters porting a hijacked number (Ninth Amendment, 2024).
- Porting time. Up to 3 working days within a service area, 5 working days between areas or for corporate numbers, and up to 15 working days in Jammu & Kashmir, Assam and the North East.
Porting is common. In September 2026 alone, 16.77 million subscribers asked to port their numbers (TRAI PR 140/2026).
The India row of our MNP atlas:
| Item | Value |
|---|---|
| Mobile number portability | Yes |
| Mobile porting since | 2011-01-20 |
| Maximum porting time | 3 working days within a service area; 5 working days between areas or corporate; up to 15 in J&K, Assam, North East |
| Governing rule | Telecommunication Mobile Number Portability Regulations, 2009 (8 of 2009), as amended; Ninth Amendment 2024 (7-day wait after a SIM swap, from 2024-07-01) |
| Published porting volume | monthly (Sep 2026): 16.77 million porting requests (2026) |
| Source | trai.gov.in, trai.gov.in |
| Checked | 2026-11-03 |
Our MNP atlas compares India with other countries. For routing, pricing or fraud rules, look up the current network per number instead of guessing from the prefix. Our SMS routing with MNP and HLR use case shows where that pays off.
Are disconnected Indian numbers reused?
Yes, after a quarantine. DoT instructions of 20 April 2017 forbid operators from giving a deactivated mobile number to a new customer for at least 90 days, whether it was cut off for non-use or at the subscriber's request (TRAI recommendations, 2025, para 2.40.2). In February 2025, TRAI recommended stricter rules: 90 days of non-use before deactivation, mandatory deactivation after a further 365 days, and longer waits before reuse. These are recommendations to DoT. A number in your CRM that was valid in 2024 may belong to someone else today, so re-check old lists before you message them. A live network status (HLR) check shows whether a number is reachable now.
Which messaging apps and channels reach people?
SMS reaches every active mobile, within the DLT rules below. For WhatsApp, India is a standalone market on Meta's rate card. Meta raised India's marketing rate on 1 January 2026 and its authentication-international rate on 1 April 2026. Solution providers and directly integrated businesses whose sold-to country is India must move every messaging account to rupee (INR) billing by 31 December 2026. From 1 January 2027, Meta stops delivering messages from their non-INR accounts (Meta pricing, read on 2026-11-03). Our WhatsApp Business API pricing post compares the categories.
We didn't find a primary source that measures messaging-app use in India in a way we can verify, so we don't quote shares. The practical answer is to measure your own opted-in customers. Check which apps they are registered on, route each person to the channel they use, and keep SMS as the fallback. Our channel-by-country guide shows the method.
How do I check WhatsApp registration for an Indian customer list?
Normalise every row first, then run one check per number. A check tells you whether a number is registered at the time of the check. It can't tell you whether the person wants your messages:
| Answer | What it means | What to do |
|---|---|---|
registered: true | The number has a WhatsApp account at checked_at | Offer WhatsApp to customers who opted in to it |
registered: false | No account at checked_at | Use SMS or another channel |
unknown | No conclusive answer (not billed) | Keep the current channel; retry later |
invalid_number | Failed format validation (not billed) | Fix the data at the source |
For lists, use a bulk job. WhatsApp checks get the bulk price only for groups of at least 132 numbers from the same country in one job, so collect a day's Indian numbers into one job rather than many small ones. Upload a CSV whose numbers are written nationally (9XXXXXXXXX) with default_country=IN:
curl https://api.mobilevalidate.com/v1/jobs \
-H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
-F file=@customers.csv -F checks=whatsapp,mnp -F default_country=INSend 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. Our bulk WhatsApp number check post walks through the whole flow.
Do I need DLT registration to send SMS to India?
Yes, for any commercial SMS. These points summarise TRAI's regulations as we read them on 2026-11-03. Ask Indian counsel how they apply to you.
Registration on DLT
The Telecom Commercial Communications Customer Preference Regulations, 2018 (TCCCPR) made Indian operators run their commercial-messaging registers on distributed ledger technology (DLT). There are separate registers for entities (senders), headers, content templates, consent and customer preferences (TCCCPR, 2018). In practice:
- Register the business (the "principal entity") on an operator's DLT platform.
- Register each header, the sender name people see, and each content template, in the right category.
- Send only through a registered telemarketer chain, usually your SMS provider, which links your traffic to your DLT registration.
Operators check commercial traffic against these registers and block messages that don't match a registered header and template. A foreign business sending to India needs the same registration, usually arranged through its Indian SMS partner.
Header suffixes: -P, -S, -T, -G
Since the 2025 amendment, people can see the type of a commercial SMS from its header. Operators add -P (promotional), -S (service), -T (transactional) or -G (government) to the registered header (TCCCPR Second Amendment, 2025). A one-time passcode template registered in the wrong category is a compliance problem, not only a delivery one.
What changed in 2026
TRAI's Third Amendment, announced on 18 September 2026, adds AI-based spam flagging shared between operators. It also suspends misused headers within six hours, requires automated calls to be declared, and limits messages based on an inquiry to seven days (TRAI PR 119/2026). We don't repeat it here: our TRAI 2026 anti-spam rules post has the details and a ten-point checklist.
Personal data
The Digital Personal Data Protection Rules, 2025 were notified on 14 November 2025, putting the Digital Personal Data Protection Act, 2023 into effect in phases over 18 months. Every data fiduciary must give a separate, plain consent notice that states the purpose (PIB, 2025). A registration check on a customer's number is processing of personal data. Follow the baseline in our consent guide: your own customers, a stated purpose, minimal data and honoured objections. Ask counsel which duties apply to you and from when.
What changed recently?
The rows for IN and +91 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) | 9 |
| Alternate formatting | 5 |
| Geocoding (area names) | 5 |
| Original-carrier prefix data | 3 |
| All | 22 |
Latest numbering-plan updates for IN: 2026-09-09 (v9.0.39), 2026-08-26 (v9.0.38), 2026-05-20 (v9.0.31), 2026-05-06 (v9.0.30), 2025-12-17 (v9.0.21).
India's numbering-plan metadata changed in two libphonenumber releases between August and September 2026, and in two more in May 2026. A library that is a few months old will reject some valid new numbers, so update it at least monthly.
Landlines may change next. In February 2025 TRAI recommended a "closed" 10-digit scheme for fixed lines: every landline-to-landline call, even a local one, would be dialled as 0 + area code + number. Mobile dialling would stay as it is (TRAI recommendations, 2025, para 3.3). As of 2026-11-03 we found no DoT notification putting it into effect. Storing every number in E.164 makes your data immune to that kind of change.
What can MobileValidate check for Indian numbers?
Generated from our public catalog:
| Check | Accepts India numbers | Notes |
|---|---|---|
| Format and country (every lookup) | Yes | Each number is parsed first; an invalid number returns invalid_number and is never billed. |
| Carrier lookup (beta) | Yes | Line type and current network where data exists; no data means unknown, not billed. Real time and bulk. |
| US/CA carrier lookup (premium) | No (US, CA only) | Answers unsupported_country for other countries, not billed. |
| Live network status (HLR) | Yes | Live reachability, porting, roaming (true or false) and current network; unknown is free. Real time and bulk. |
| Number portability (MNP) | Yes | Ported or not ported, and the current network code; unknown is free. Real time and bulk. |
| Spam reputation | Limited access | All countries except sanctioned ones; report coverage is strongest in North America and Europe. |
| Messaging apps | Yes: WhatsApp, Telegram, Viber*, Signal*, iMessage*, RCS*, LINE*, Zalo*, Botim*, Facebook Messenger* | Registered, not registered or unknown; unknown is free. |
| Social networks | Yes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat*, LinkedIn* | Registered, not registered or unknown; unknown is free. |
| Online accounts (Apple, Amazon, Microsoft, Netflix) | Yes: Apple, Amazon, Microsoft, Netflix | Registered, not registered or unknown; unknown is free. |
* bulk jobs only. Catalog as fetched on 2026-11-03; the live list is at GET /v1/services.
A lookup returns network and registration facts. It never returns a subscriber's name, Aadhaar or other ID number, or address, and we don't offer "number details" searches.
How to start without paying:
- Free test key. Get a test key: it never touches a real network and returns fixed answers for reserved test numbers, so you can build every branch first (test mode).
- Five real checks. Every live account can run 5 phone numbers and 5 e-mail addresses through the real-time checks for free on the dashboard's Try it page.
- Free estimate.
POST /v1/jobs/estimateshows the maximum cost of a bulk file before anything runs.
To get a live account, request access. Viber checks are bulk-only for now, as the asterisks in the table show. Prices are on the pricing page, which also lists the top-up bonuses on larger balances.
Here is a practical flow for a customer list: normalise with normalize_in(), then one real-time lookup gives porting status, the current network code (MCC-MNC) and WhatsApp registration. 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_in().
import os
import requests # pip install requests
API = "https://api.mobilevalidate.com/v1/lookup"
KEY = os.environ["MOBILEVALIDATE_API_KEY"]
def route(numbers: list[str]) -> dict[str, dict]:
"""Porting status, current network code and WhatsApp registration. None means we don't know."""
r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
json={"numbers": numbers, "checks": ["mnp", "whatsapp"], "wait": 5})
r.raise_for_status()
out = {}
for row in r.json()["results"]:
mnp, wa = row["checks"]["number.mnp"], row["checks"]["whatsapp.registered"]
attrs = (mnp["attributes"] or {}) if mnp["status"] == "completed" else {}
out[row["e164"]] = {
"porting": attrs.get("porting"),
"mcc_mnc": attrs.get("mcc_mnc"),
"whatsapp": wa["registered"] if wa["status"] == "completed" else None,
}
return out
for number, info in route(["+447700900001", "+447700900002", "+447700900005"]).items():
print(number, info)What it printed with the sandbox key on 2026-11-03:
+447700900001 {'porting': 'not_ported', 'mcc_mnc': '23415', 'whatsapp': True}
+447700900002 {'porting': 'not_ported', 'mcc_mnc': '23415', 'whatsapp': False}
+447700900005 {'porting': None, 'mcc_mnc': None, 'whatsapp': None}The last test value answers unsupported_country for both checks, so everything is None. Keep None apart from False: None means we don't know, and it's never billed. Requests with 20 or more consecutive numbers are refused (403 suspected_enumeration), and our acceptable use policy forbids finding recipients for unsolicited messages. People can object through our opt-out form. See WhatsApp number check, MNP lookup and HLR lookup for the fields.
What are the key takeaways?
- Indian numbers are
+91plus 10 digits; ordinary mobiles start with 6, 7, 8 or 9. Store the E.164 form. - Several 6, 7 and 8 blocks are shared with landline area codes, so validate with libphonenumber and region
IN, not a first-digit rule. Convert Devanagari digits before parsing in JavaScript. - 140 (promotional), 1600 and 1601 (service) are call series for businesses, not sign-up numbers.
- Prefixes don't show the operator: porting has run nationwide since 20 January 2011, with 16.77 million requests in September 2026. Ports wait 90 days after activation and 7 days after a SIM swap.
- Commercial SMS needs DLT registration of the sender, headers and templates; see our TRAI 2026 rules guide for this year's changes.
- Check WhatsApp registration only for customers you hold lawfully, keep
unknownapart fromfalse, and never treat registration as consent.
Platform, regulator and company names are used descriptively. MobileValidate is not affiliated with any of them.
Sources
- Telecom subscription data as on 30 September 2026 (Press release No. 140/2026, 27 October 2026) — Telecom Regulatory Authority of India, 2026
- Telecommunication Mobile Number Portability Regulations, 2009 (8 of 2009), consolidated text — Telecom Regulatory Authority of India, 2024
- Telecommunication Mobile Number Portability (Ninth Amendment) Regulations, 2024 (14 March 2024) — Telecom Regulatory Authority of India, 2024
- Mobile number portability: frequently asked questions — Telecom Regulatory Authority of India, 2026
- Recommendations on Revision of National Numbering Plan (6 February 2025) — Telecom Regulatory Authority of India, 2025
- National Numbering Plan 2003 (India page of the ITU national numbering plans list) — International Telecommunication Union / Department of Telecommunications, Government of India, 2003
- Telecom Commercial Communications Customer Preference Regulations, 2018 (19 July 2018) — Telecom Regulatory Authority of India, 2018
- Telecom Commercial Communications Customer Preference (Second Amendment) Regulations, 2025 (12 February 2025) — Telecom Regulatory Authority of India, 2025
- Press release No. 119/2026: TRAI strengthens framework for curbing unsolicited commercial communications (18 September 2026) — Telecom Regulatory Authority of India, 2026
- Press release No. 91/2026: 140 and 1600 series (10 July 2026) — Telecom Regulatory Authority of India, 2026
- Press release No. 113/2026: phase-wise implementation of the 1601 series (10 August 2026) — Telecom Regulatory Authority of India, 2026
- Press release No. 135/2025: 1600 series for BFSI entities (19 November 2025) — Telecom Regulatory Authority of India, 2025
- DPDP Rules, 2025 notified: a citizen-centric framework for privacy protection (17 November 2025) — Press Information Bureau, Government of India, 2025
- WhatsApp Business Platform pricing — Meta for Developers, 2026
- libphonenumber PhoneNumberMetadata.xml (region IN) and release notes — libphonenumber project (Apache License 2.0), 2026
Frequently asked questions
How many digits is an Indian phone number?
Ten digits after the country code +91, for mobiles and landlines alike. In E.164 an Indian mobile is +91 followed by 10 digits, for example +91 81XXX XXXXX, so 12 digits without the plus sign. Written at home it is the same 10 digits, sometimes with a leading 0. Toll-free 1800 numbers and machine-to-machine (M2M) SIMs can be longer.
What is India's country code for WhatsApp and international calls?
+91. Write the 10-digit number after it with no leading 0: 081XXX XXXXX becomes +91 81XXX XXXXX. From abroad you can also dial 0091 instead of the plus. Store the E.164 form, +91 and the 10 digits with no spaces, and use it for every platform and API.
Which prefixes are mobile numbers in India?
Ordinary Indian mobiles start with 6, 7, 8 or 9. The first two to four digits don't tell you the current operator, because blocks are allocated to operators by service area and numbers have been portable nationwide since 20 January 2011. Some blocks starting with 6, 7 or 8 are shared with landline area codes, so use a numbering-plan library rather than a first-digit check.
What are 140, 1600 and 1601 numbers in India?
Special series for commercial calls. 140 numbers carry promotional calls and are subject to people's do-not-disturb choices. 1600 numbers carry service and transactional calls from banks and other finance firms regulated by RBI, SEBI, IRDAI or PFRDA and from government bodies. 1601 is being phased in from August 2026 for other sectors. People don't sign up with these numbers; businesses call from them.
Can an Indian mobile number keep its digits after changing operator?
Yes. Under TRAI's Mobile Number Portability Regulations, 2009, a number can be ported once 90 days have passed since activation or the last port, and not within 7 days of a SIM swap. The subscriber texts PORT and the number to 1900 to get a unique porting code. A port takes up to 3 working days in the same service area and 5 between areas, as of November 2026.
Do I need DLT registration to send SMS to India?
Yes, for commercial SMS. Under TRAI's 2018 regulations, the sender (principal entity), its headers and its message templates must be registered on the operators' DLT platform, and unregistered traffic is blocked. Since the 2025 amendment, operators add -P, -S, -T or -G to the header to show whether a message is promotional, service, transactional or government.
Can I check whether Indian customers are on 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, and unknown answers are not billed. It never returns a name or profile, and requests that look like scans of number ranges are refused.
Related services and guides
More from the blog
All articlesGuides
Phone numbers by country: formats, portability, channels and rules
How phone numbers differ by country: formats and E.164, numbering changes, portability, line types, messaging channels, and a dated tracker of calling and texting rules.
11 min read
Developers
How to validate Indian mobile numbers in code
Code to validate Indian mobile numbers: what ^[6-9]\d{9}$ misses, normalising +91, 0 and 0091, and tested JavaScript, Python, PHP and C# functions.
8 min read
Guides
India's 2026 anti-spam rules: what TRAI's new amendment means for senders
What TRAI's TCCCPR Third Amendment of 18 September 2026 changes: AI spam flagging, A2P call declaration, 6-hour header suspension, 7-day inquiry consent, 140/1600/1601.
9 min read

