# South Korean phone numbers: format, 010 mobiles, validation and messaging rules

> South Korean phone number format: +82 and 11-digit 010 mobiles, area codes, 070 and 1588 numbers, tested code, porting and the ad-label SMS rules.

Canonical: https://mobilevalidate.com/blog/south-korea-phone-number-format · Last updated: 2026-11-03

![A card spells out a mobile number as +82, then 10, then two groups of four digit dots, with old 011, 016 and 017 codes crossed out for 010. Below: a document with an (AD) label, a clock from 9PM to 8AM and two towers marked 2004.](https://mobilevalidate.com/images/blog/south-korea-phone-number-format.svg)

*Korean mobiles are +82 10 plus eight digits; ads need consent, a label and no night sends.*


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-11-03 · Category: Guides · Tags: South korea, Phone validation, E.164, MNP, SMS, Compliance

South Korean numbers use the country code +82. A mobile number has 11 digits at home and starts with 010, written 010-XXXX-XXXX, so in E.164 it is +82 10 XXXX XXXX: drop the leading 0 and keep ten digits. The 010 prefix doesn't show the operator, because every operator uses it and numbers have been portable since 2004. Marketing texts need the recipient's prior consent, must start with the label (광고) ("advertisement"), and need a separate consent between 9 p.m. and 8 a.m.

This guide is part of our [phone numbers by country](/blog/phone-numbers-by-country) series. The tables are generated from libphonenumber's metadata, our [MNP atlas](/datasets/mnp-atlas-2026) and our public catalog. Example numbers are masked with X, or are the example numbers published in libphonenumber. We read the numbering rules and the laws in their current versions on the Korea Law Information Center (law.go.kr) on 2026-11-03, and KISA's pages on the same day. The laws are in Korean. The English summaries below are ours, and where we rely on press reports we say so. This is a summary, not legal advice.

## What does a South Korean phone number look like?

A mobile number is `010-XXXX-XXXX` at home: the trunk prefix `0`, the code `10` and eight subscriber digits. From abroad it is `+82 10-XXXX-XXXX`. The Ministry of Science and ICT (MSIT) issues the numbering rules, the Telecommunications Number Management Rules. They say mobile numbers are assigned "regardless of service" as `010-ABYY-YYYY`, where `A` is 2 to 9 ([numbering rules](https://www.law.go.kr/%ED%96%89%EC%A0%95%EA%B7%9C%EC%B9%99/%EC%A0%84%EA%B8%B0%ED%86%B5%EC%8B%A0%EB%B2%88%ED%98%B8%EA%B4%80%EB%A6%AC%EC%84%B8%EC%B9%99), article 20). The same rules cap a domestic number at 13 digits and a full international number at 15 (article 6).

<!-- country-data:KR:format:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (libphonenumber metadata 9.0.39 via libphonenumber-js 1.13.13); edit the script, not this table -->

| Item | Value |
|---|---|
| Country calling code | `+82` |
| International call prefix (dialling out) | `00(?:[125689]\|3(?:[46]5\|91)\|7(?:00\|27\|3\|55\|6[126]))` (pattern: more than one prefix is used) |
| Trunk prefix (dialling at home) | `0` |
| Mobile: digits after +82 | 9, 10 |
| Fixed line: digits after +82 | 5, 6, 8–10 |
| Toll-free: digits after +82 | 9, 11–14 |
| Premium rate: digits after +82 | 9 |
| Personal number: digits after +82 | 10, 11 |
| VoIP: digits after +82 | 10 |
| Pager: digits after +82 | 9, 10 |
| Universal access (UAN): digits after +82 | 8 |
| Mobile, national format (masked) | `010-XXXX-XXXX` |
| Mobile, international (masked) | `+82 10 XXXX XXXX` |
| Mobile, E.164 (masked) | `+8210XXXXXXXX` |
| Fixed line, national format (masked) | `031-XXXX-XXXX` |
| Fixed line, international (masked) | `+82 31 XXXX XXXX` |
| Fixed line, E.164 (masked) | `+8231XXXXXXXX` |
<!-- country-data:KR:format:end -->

Store only the E.164 form, `+8210XXXXXXXX`, with no hyphens and no `0` after `82`. Korean forms usually collect `010-XXXX-XXXX` or `01012345678` without hyphens. Lists from abroad add `82 10…` without a plus, `+82 010…` with a stray zero, or `0082 10…`. A numbering-plan library with the default region `KR` handles most of these. The `0082` form needs one extra step.

### Why does 0082 fail validation?

South Korea has no single `00` exit code. Each international carrier has its own access code. The numbering rules give network-owning international carriers `00X`, where X isn't 3, 7 or 9 (so `001`, `002`, `005`, `006` and `008`), and resellers `003YY` or `007YY` (article 8). That is why the generated table above shows a pattern instead of a single prefix. libphonenumber follows the rules: if it is told a number comes from Korea, `0082 10…` doesn't start with a valid exit code. Both ports we test then read the string as one long national number, which isn't valid. Row 3 of the test table below shows the result.

People still type `0082`, because `00` is the exit code in most other countries. The fix is one line: rewrite a leading `00` followed by a non-zero digit to `+` before parsing.

## Which prefixes are mobile numbers?

Today, `010`. For each 3-digit block the generator counted every number that libphonenumber's mobile pattern for `KR` accepts:

<!-- country-data:KR:prefixes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (exact count over the mobile pattern, libphonenumber metadata 9.0.39); edit the script, not this table -->

| National prefix | International | Share of the block that is mobile (9, 10-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `010` | `+82 10` | 99.7% | partly mobile: 0105 (97.0%) |
| `011` | `+82 11` | 100% | — |
| `012` | `+82 12` | 92.0% | partly mobile: 0122 (20.0%) |
| `016` | `+82 16` | 100% | — |
| `017` | `+82 17` | 100% | — |
| `018` | `+82 18` | 100% | — |
| `019` | `+82 19` | 100% | — |
<!-- country-data:KR:prefixes:end -->

The library is broader than the regulator here, in four ways:

- **01X legacy codes.** `011`, `016`, `017`, `018` and `019` were the 2G operator codes. Since 1 January 2004, every new and every renumbered mobile subscriber has been given an `010` number (numbering rules, transitional article 3). The rules let 01X users keep their number on a newer network without changing operator only until 30 June 2021. The 2G networks themselves are closed: KT shut its network in 2012 and SK Telecom in 2020. LG U+ dismantled the last one by the end of June 2021, after MSIT approved the shutdown on 25 May 2021. Its 01X numbers were kept only until that date and then had to move to `010` ([News Tomato, 2021](https://newstomato.com/ReadNews.aspx?no=1046529)). We found no MSIT figure on how many 01X numbers still work.
- **012 is for machines.** The rules give `012` to machine-to-machine (M2M) operators (article 8). libphonenumber accepts most of the `012` block as `MOBILE`, but these lines belong to devices, not people.
- **10-digit 010 numbers.** libphonenumber accepts `010` with seven subscriber digits as well as eight. Row 6 of the test table shows a 10-digit `010` number passing. The rules assign only the 11-digit form.
- **010-0 and 010-1.** The rules assign `010-ABYY-YYYY` with `A` from 2 to 9, but the library's pattern also accepts exchanges starting with 0 or 1.

Two neighbours of `010` aren't mobile at all: `015` is paging, and `013Y` covers special networks such as trunked radio, wireless data and private 5G. `0135` is the integrated public-safety network (article 8).

So for a sign-up form or an OTP flow, accept only `+8210` followed by a digit from 2 to 9 and seven more digits. The code below does that by default and keeps a switch for old data.

### Can you tell the operator from the number?

No. The rules divide `010` into four-digit exchanges and assign them to operators in blocks of 100,000 numbers, or 10,000 where demand is smaller (article 20). But numbers have been portable since 2004, and the rules also allow operators to share `010` numbers (article 20-2). Mobile virtual network operators (MVNOs, called "budget phones" in Korea) use the same ranges. The exchange is at best a hint about which operator first held the block.

libphonenumber's carrier prefix data shows the limits. We checked all 800 exchanges from `0102` to `0109` with the Python port 9.0.40 on 2026-11-03. It names only three holders and leaves 54 exchanges without a name. It labels 326 exchanges "SKTellink", 250 "KT" and 170 "LG U+". Treat a library carrier name as a guess about the original range holder, never as the current network. To route by network or detect a port, use a live lookup.

## What do 02, 031, 070, 050, 080 and 1588 mean?

Everything that isn't `010` follows the same plan. The area code table is in article 7 of the numbering rules. The service codes are in article 8 and the four-digit special numbers in article 11.

| Code | National format (masked) | What it is |
|---|---|---|
| `02` | `02-XXX-XXXX`, `02-XXXX-XXXX` | Seoul fixed lines |
| `031` to `033` | `031-XXX(X)-XXXX` | Gyeonggi (`031`), Incheon (`032`), Gangwon (`033`) |
| `041` to `044` | `041-XXX(X)-XXXX` | South Chungcheong (`041`), Daejeon (`042`), North Chungcheong (`043`), Sejong (`044`) |
| `051` to `055` | `051-XXX(X)-XXXX` | Busan (`051`), Ulsan (`052`), Daegu (`053`), North Gyeongsang (`054`), South Gyeongsang (`055`) |
| `061` to `064` | `061-XXX(X)-XXXX` | South Jeolla (`061`), Gwangju (`062`), North Jeolla (`063`), Jeju (`064`) |
| `070` | `070-XXXX-XXXX` | Internet telephony (VoIP) |
| `050` | `050X-XXXX-XXXX` | Personal numbers, often used as privacy-masking ("safe") numbers that forward to a hidden line |
| `080` | `080-XXX-XXXX` | Free phone (the called party pays) |
| `060` | `060-XXX-XXXX` | Paid information services |
| `15XX`, `16XX`, `18XX` | `1588-XXXX` | Nationwide representative numbers: one 8-digit number for all of a company's lines, dialled without an area code |

The table leaves out the codes the rules keep in reserve (`034` to `039`, `045` to `049`, `056` to `059` and `065` to `069`). Fixed-line numbers have three- or four-digit exchanges. libphonenumber's examples for these types are `02-212-3456` (fixed), `070-1234-5678` (VoIP), `080-123-4567` (free phone) and `1544-1234` (representative number).

Two consequences for forms. A `1588` number has only eight digits and no area code, so a form that insists on an area code rejects real business numbers. And none of these numbers is a mobile number, so none of them should receive a sign-up OTP by SMS.

## How do I validate a South Korean number in code?

Use a libphonenumber port with full metadata and the default region `KR`, rewrite `00` to `+` first, keep only mobiles, then apply the `010` rule.

**Python** (`pip install phonenumbers`):

```python title="kr_normalize.py"
import re

import phonenumbers

CURRENT_010 = re.compile(r"\+8210[2-9]\d{7}")  # MSIT plan: 010-ABYY-YYYY, A = 2 to 9


def normalize_kr(raw: str, allow_legacy: bool = False) -> str | None:
    """E.164 for a South Korean mobile number, or None."""
    s = re.sub(r"^\s*00(?=[1-9])", "+", raw)  # 0082… is foreign-style dialling; Korea's exit codes are 001, 002, 00700…
    try:
        n = phonenumbers.parse(s, "KR")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "KR"
            or phonenumbers.number_type(n) != phonenumbers.PhoneNumberType.MOBILE):
        return None
    e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
    if not allow_legacy and not CURRENT_010.fullmatch(e164):
        return None  # 011, 016-019, 012 or a 10-digit 010 number
    return e164


for raw in ["010-2000-0000", "+82 10-2000-0000", "821020000000", "0082 10 2000 0000",
            "+82 010-2000-0000", "010-200-0000", "02-212-3456", "070-1234-5678", "1544-1234"]:
    print(f"{raw!r:22} -> {normalize_kr(raw)}")
```

**JavaScript** (`npm install libphonenumber-js`):

```js title="kr-normalize.mjs"
import { parsePhoneNumberFromString } from "libphonenumber-js/max";

const CURRENT_010 = /^\+8210[2-9]\d{7}$/; // MSIT plan: 010-ABYY-YYYY, A = 2 to 9

/** "010-…", "+82 10…", "82…" or "0082…" → E.164 for a South Korean mobile, or null. */
export function normalizeKr(raw, { allowLegacy = false } = {}) {
  const s = String(raw).replace(/^\s*00(?=[1-9])/, "+"); // 0082… → +82…
  const phone = parsePhoneNumberFromString(s, "KR");
  if (!phone?.isValid() || phone.country !== "KR" || phone.getType() !== "MOBILE") return null;
  return allowLegacy || CURRENT_010.test(phone.number) ? phone.number : null;
}

for (const raw of ["010-2000-0000", "+82 10-2000-0000", "821020000000", "0082 10 2000 0000",
  "+82 010-2000-0000", "010-200-0000", "02-212-3456", "070-1234-5678", "1544-1234"]) {
  console.log(JSON.stringify(raw).padEnd(22), "->", normalizeKr(raw));
}
```

The inputs are built from libphonenumber's own example numbers for Korea (mobile `010-2000-0000`, fixed line `02-212-3456`, VoIP `070-1234-5678`, representative number `1544-1234`), not real subscribers. 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 printed the same answers:

```text
'010-2000-0000'        -> +821020000000
'+82 10-2000-0000'     -> +821020000000
'821020000000'         -> +821020000000
'0082 10 2000 0000'    -> +821020000000
'+82 010-2000-0000'    -> +821020000000
'010-200-0000'         -> None
'02-212-3456'          -> None
'070-1234-5678'        -> None
'1544-1234'            -> None
```

(The JavaScript version prints `null` instead of `None` and uses double quotes.) The fourth line works only because of the `00` rewrite. The sixth line, a 10-digit `010` number, is valid for libphonenumber, and `normalize_kr("010-200-0000", allow_legacy=True)` returns `+82102000000`. It is our `010` rule that drops it. Use `allow_legacy` only to clean old records, never for new sign-ups. The shape regex column below tests the pattern most tutorials give, after spaces, dashes and brackets are removed:

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

| # | Case | Input (masked) | Shape regex `^(?:\+82\|0082\|0)?1\d{8,9}$` | libphonenumber (`KR`) |
|---|---|---|---|---|
| 1 | National, with trunk prefix | `010-XXXX-XXXX` | passes | valid, `MOBILE` |
| 2 | International, with spaces | `+82 10 XXXX XXXX` | passes | valid, `MOBILE` |
| 3 | International dialling prefix 00 | `0082 10-XXXX-XXXX` | passes | invalid |
| 4 | E.164 | `+8210XXXXXXXX` | passes | valid, `MOBILE` |
| 5 | Dashes and brackets | `(010) XXXX-XXXX` | passes | valid, `MOBILE` |
| 6 | One digit short | `010XXXXXXX` | passes | valid, `MOBILE` |
| 7 | One digit too many | `010XXXXXXXXX` | fails | invalid |
| 8 | Mobile shape, unused block 013 | `013XXXXXXXX` | passes | invalid |
| 9 | Fixed line | `031-XXXX-XXXX` | fails | valid, `FIXED_LINE` |
| 10 | Pager range | `015-XXXX-XXXX` | passes | valid, `PAGER` |
<!-- country-data:KR:tests:end -->

Rows 3, 6, 8 and 10 are the ones to remember. Row 3 is the `0082` trap above. Row 6 passes both the regex and the library, but the numbering rules don't assign 10-digit `010` numbers. Row 8, `013`, has the shape of a mobile number, but `013` is for special networks and isn't a phone range. Row 10 is a pager number that the regex happily accepts. Our post on [why an E.164 regex is not enough](/blog/e164-regex-is-not-enough) shows the same problem in other countries, and our [Python](/blog/phone-number-validation-python) and [JavaScript](/blog/phone-number-validation-javascript) guides cover more cases.

## Does number portability change the carrier?

Yes. Mobile number portability (MNP) started on 1 January 2004, together with the move to `010`. It opened in stages. SK Telecom's subscribers could leave first, and in the first four days 31,798 of them moved to KTF or LG Telecom ([Seoul Shinmun, 2004](https://www.seoul.co.kr/news/2004/01/05/20040105003005)). The same report names July 2004 as the date from which KTF's customers could port too.

The Telecommunications Business Act lets MSIT set a number portability plan and appoint a neutral body to register ports (article 58). Two practical rules matter for data teams:

- **A cooling-off period on new lines.** Since 2009, a subscriber who has just signed up, or whose line has just changed owner, can't port the number again for three months. The then regulator, the Korea Communications Commission (KCC), adopted it to stop people porting again and again to collect new handsets and resell them ([Korea Policy Briefing, 2009](https://m.korea.kr/news/policyNewsView.do?newsId=148672872)).
- **Ports are frequent.** The Korea Telecommunications Operators Association (KTOA) publishes monthly totals. In June 2026 it counted 641,932 mobile ports, 9.9% more than in May ([Digital Daily, 2026](https://www.ddaily.co.kr/page/view/2026070111394053626)). The same report says January 2026 reached about a million.

Porting is common in South Korea, so the `010` exchange tells you even less about the current network than in most countries. We didn't find a published maximum porting time in an official text we could open. Our MNP atlas doesn't have a verified Korea row yet:

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

Our [MNP atlas](/datasets/mnp-atlas-2026) has no verified row for South Korea yet.
<!-- country-data:KR:mnp:end -->

To route traffic, price by network or spot recent ports, look up the current network per number, as our [SMS routing with MNP and HLR](/use-cases/sms-routing-mnp-hlr) use case shows. Our [MNP atlas](/blog/mobile-number-portability-atlas) compares other countries.

## What are the rules for SMS marketing, sender numbers and personal data?

These summarise the Korean texts as we read them on 2026-11-03. Not legal advice; ask counsel how they apply to you.

Who enforces what: the spam rules in the Information and Communications Network Act are enforced by the **Korea Media and Communications Commission (KMCC)**. It took over from the KCC on 1 October 2025, when the act that created it repealed the KCC's own act ([KMCC Act](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%B0%A9%EC%86%A1%EB%AF%B8%EB%94%94%EC%96%B4%ED%86%B5%EC%8B%A0%EC%9C%84%EC%9B%90%ED%9A%8C%EC%9D%98%EC%84%A4%EC%B9%98%EB%B0%8F%EC%9A%B4%EC%98%81%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0), addendum article 2). MSIT handles numbering and caller-ID spoofing. The Korea Internet & Security Agency (KISA) takes spam reports and investigates them. The Personal Information Protection Commission (PIPC) enforces the Personal Information Protection Act.

### Article 50: consent first, (광고) label, no ads at night

Article 50 of the Information and Communications Network Act covers commercial ads sent by any "electronic transmission medium". The Decree's annex sets separate rules for email, fax and other media, which include text messages and voice calls ([Network Act](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%95%EB%B3%B4%ED%86%B5%EC%8B%A0%EB%A7%9D%EC%9D%B4%EC%9A%A9%EC%B4%89%EC%A7%84%EB%B0%8F%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%93%B1%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0), version in force since 2 October 2026). Its Enforcement Decree fills in the details ([Enforcement Decree](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%95%EB%B3%B4%ED%86%B5%EC%8B%A0%EB%A7%9D%EC%9D%B4%EC%9A%A9%EC%B4%89%EC%A7%84%EB%B0%8F%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%93%B1%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0%EC%8B%9C%ED%96%89%EB%A0%B9)):

- **Explicit prior consent** (article 50(1)). There are two exceptions. One is a seller who got the contact details directly from the customer through a purchase. It may advertise the same kind of goods for six months after the transaction ends (Decree article 61(1)). The other is a telemarketer who tells the person, live and by voice, where their data came from.
- **Stop when asked** (50(2)). Once someone refuses or withdraws consent, no more ads.
- **No ads from 9 p.m. to 8 a.m.** without a separate prior consent (50(3)). Email is the only medium exempt from this (Decree article 61(2)), so the rule applies to SMS.
- **Label and identify** (50(4) and Decree Annex 6). A text ad must start with `(광고)`, Korean for "advertisement", followed by the sender's name and phone number or address. The end of the message must give a free way to refuse or withdraw consent, and say that it costs nothing. Annex 6 forbids blanks, symbols or other tricks inside the label that would help an ad slip past filters.
- **A free opt-out** (50(6), Decree article 62). The recipient must not pay to refuse, so the sender provides a free-call number or an equivalent free method.
- **Confirm the result** (50(7), Decree article 62-2). When someone consents, refuses or withdraws, the sender must tell them the result within 14 days, with its name and the date.
- **Reconfirm every two years** (50(8), Decree article 62-3). Senders must ask each recipient every two years from the date of consent whether the consent still stands.
- **No generated numbers** (50(5)). Making up phone numbers or email addresses by combining digits or characters is banned. So is registering numbers automatically to send ads, hiding the sender, and tricking people into replying.

Penalties. Sending ads in breach of 50(1) to (3), or without the required details, can bring an administrative fine of up to 30 million won (article 76(2)). Breaking 50(5), for example by generating numbers, can bring up to one year in prison or a fine of up to 10 million won (article 74(1)). The 2026 amendment adds a surcharge of up to 6% of the revenue related to the breach (article 50-9). It took effect six months after the law was published on 31 March 2026, and applies to breaches from then on.

### Bulk SMS providers need a sender qualification certificate

The 2026 amendment also requires anyone who hands ad sending to a third party to use a text-messaging provider that holds a sender qualification certificate (Network Act article 50-3(1)). The Telecommunications Business Act already required that certificate from every business that connects a text-messaging system to operators' networks. The requirement took effect six months after the amending law of 18 March 2025, and existing providers got another six months to certify ([Telecommunications Business Act](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%84%EA%B8%B0%ED%86%B5%EC%8B%A0%EC%82%AC%EC%97%85%EB%B2%95), article 22-11 and addendum). The KMCC can revoke the certificate if a provider breaks the spam rules.

The KMCC's certification standards (Notice 2026-1) change what senders see ([KMCC notice](https://www.law.go.kr/LSW/flDownload.do?flSeq=163987069)):

- **One account per user.** An account can register at most three mobile sender numbers for an individual (two for a foreigner) or four for a company. The limit on landline and VoIP sender numbers is five for an individual and the number of staff for a company.
- **Foreign IP addresses are blocked.** Certified systems must block access from abroad, unless the provider has documents for an overseas resident or foreign company and an administrator approves it. Check this with your provider before you plan Korean campaigns from outside Korea.
- **Proof of the sender number.** The provider must check that the holder of the sender number is the account holder who pays, and run an extra identity check on the sender number when messages are sent.
- **Logs and filters.** Providers keep sending and billing logs for at least a year and run keyword and malicious-link filters.

### Caller ID: spoofing is a crime, and calls from abroad are flagged

Article 84-2 of the Telecommunications Business Act bans faking the caller number on a call or text to defraud or harm someone, and bans selling services or devices that fake caller numbers for profit. Carriers must block or correct spoofed numbers, cut off lines that send them, and flag calls that come from abroad ("international call" notice). In this article, a call includes a text message. Spoofing with intent to defraud can bring up to three years in prison or a fine of up to 100 million won (article 95-2).

KISA runs the spoofing report centre. It accepts reports only for calls or texts received within the last 30 days. Public bodies and companies can register their numbers in KISA's systems, so that calls from abroad that spoof them are blocked and web-sent texts that use them are refused. Individuals can get the same protection for web-sent texts through a free add-on from SK Telecom, KT or LG U+ ([KISA spoofing page](https://www.kisa.or.kr/1020602)).

For OTP senders this means: send from a registered Korean sender number through a certified provider. Expect messages sent from abroad to show the carrier's international notice.

### How people report spam

The KISA illegal spam response centre takes reports by phone at `118`, whose automated line is open 24 hours (option 4 for illegal spam), on the web at spam.kisa.or.kr, or by post. KISA identifies the sender with operators' help and passes the case to the KMCC, which can impose fines ([KISA spam page](https://www.kisa.or.kr/1060301)). Under KMCC Notice 2026-1, certified providers must cut off a user or sender number once they confirm illegal spam from reports or government data. When a provider applies for certification, the KMCC can also look at the spam reports filed with KISA against it.

### Personal data (PIPA)

The Personal Information Protection Act (PIPA) is the general data law ([PIPA](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B2%95), version in force since 11 September 2026):

- **Legal bases** (article 15). Consent is one basis. Others include performing a contract and a legitimate interest that clearly outweighs the person's rights.
- **Separate consent for marketing** (article 22(1)7). Consent to process data for promoting or selling goods must be asked for separately and clearly. Refusing it can't be a reason to deny the service (22(5)).
- **Transfers abroad** (article 28-8). Moving personal data out of Korea, including letting it be viewed from abroad, needs a basis such as separate consent or disclosure in the privacy policy for a contract.
- **A local representative** (article 31-2). Some processors with no address or office in Korea must name a domestic representative, depending on revenue and data volume.
- **Surcharges** of up to 3% of total revenue for unlawful processing (article 64-2).

A phone number is personal data under PIPA. Checking your own customers' numbers to deliver what they asked for fits the contract and legitimate interest bases. Messaging people who never gave you their number doesn't.

## Which messaging apps and channels reach people?

KakaoTalk is the main messenger in South Korea. Kakao reported 48.93 million domestic monthly active users in the second quarter of 2024 ([Kakao, 2024](https://www.kakaocorp.com/page/detail/11175)). **MobileValidate doesn't offer a KakaoTalk check.** Our results say nothing about whether a number uses KakaoTalk, and we don't infer it.

What we can tell you for Korean numbers is whether the number is live and on which network (HLR, MNP and carrier lookups), and whether it is registered on the apps in our catalog, such as WhatsApp or Telegram. We found no verified figures for WhatsApp or Telegram use in South Korea. A `false` for WhatsApp says only that this number has no WhatsApp account, not that the number is bad. SMS reaches every active mobile and remains the fallback for OTP. Our [channel-by-country guide](/blog/choosing-a-messaging-channel-by-country) shows how to measure your own opted-in customers rather than rely on national shares.

## What changed recently?

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

<!-- country-data:KR:changes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (rows of content/datasets/numbering-plan-changes-2019-2026); edit the script, not this table -->

| Change named in the release notes (2019-01-08 to 2026-09-23) | Releases |
|---|---:|
| Numbering-plan metadata (validation, lengths, types) | 14 |
| Short numbers | 3 |
| Original-carrier prefix data | 3 |
| All | 20 |

Latest numbering-plan updates for `KR`: 2026-01-13 (v9.0.22), 2025-12-17 (v9.0.21), 2024-07-24 (v8.13.42), 2024-01-10 (v8.13.28), 2023-07-19 (v8.13.17).
<!-- country-data:KR:changes:end -->

The numbering itself is stable: `010` has been the only mobile code for new lines since 2004, and the last 2G network closed in June 2021. libphonenumber's two most recent `KR` updates came in December 2025 and January 2026. The big changes are on the rules side:

- **1 October 2025:** the KMCC replaced the KCC as the regulator for spam and the Network Act's user protection rules.
- **2025 and 2026:** text-messaging providers must hold a sender qualification certificate, and KMCC Notice 2026-1 sets the standards, including the foreign IP block and the sender number checks.
- **October 2026:** the Network Act amendment of 31 March 2026 took effect. It requires certified providers for outsourced ad sending and adds the 6% surcharge.

## What can MobileValidate check for South Korean numbers?

Generated from our public catalog:

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

Catalog data as of 2026-11-03.

| Check | Accepts South Korea 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* | Not for South Korea numbers: LinkedIn (US, IN only). |
| Online accounts (Apple, Amazon, Microsoft, Netflix) | Yes: Apple, Amazon, Microsoft, Netflix | Registered, not registered or unknown; unknown is free. |

\* bulk jobs only. The live list is at [`GET /v1/services`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:KR:coverage:end -->

KakaoTalk isn't in the list because we don't check it. 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 South Korean numbers, the useful check is an [MNP lookup](/services/mnp-lookup): ported or not ported, and the current network code (MCC-MNC). With more than half a million ports a month, the `010` exchange is no guide. Add a [live network status (HLR) check](/services/hlr-lookup) when you also need to know whether the number is reachable right now, for example before an OTP or a call campaign. The [carrier lookup](/services/carrier-lookup) adds line type.

How to start without paying:

- **Free test key.** [Get a test key](/get-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](/docs/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/estimate` shows the maximum cost of a bulk file before anything runs.

To get a live account, [request access](/request-access). For lists, use a [bulk job](/docs/bulk-jobs) and upload the CSV with `default_country=KR`, so numbers written as `010-XXXX-XXXX` are read as Korean. Viber is bulk-only for now, as the asterisks in the table show. Prices are on the [pricing](/pricing) page, which also lists the top-up bonuses: +5% from US$100, +8% from US$500 and +10% from US$2,000.

Here is a small flow for a customer list. Normalise with `normalize_kr()`, then one real-time lookup returns the porting status, the current network code and WhatsApp registration. It uses the public sandbox key `mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym` and our [test values](/docs/test-values). The sandbox accepts only those UK drama numbers, so the example uses them. With a live key, pass the output of `normalize_kr()`.

```python title="kr_route.py"
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 {}
        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)
```

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

```text
+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}
```

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`). That matches the spirit of article 50(5), which bans generating numbers to send ads. Our [acceptable use policy](/legal/acceptable-use) forbids finding recipients for unsolicited messages, and people can object through our [opt-out form](/opt-out).

## What are the key takeaways?

- South Korean mobiles are `+82` plus ten digits, `+82 10-XXXX-XXXX`, written `010-XXXX-XXXX` at home. Store the E.164 form.
- Korea has carrier-specific exit codes (`001`, `002`, `00700`…), so rewrite a leading `00` to `+` before parsing, or `0082…` will fail.
- For new sign-ups, accept only `+8210` plus a digit from 2 to 9 and seven more digits. 01X numbers belonged to 2G networks that closed by mid-2021, `012` is for machines, and 10-digit `010` numbers aren't assigned.
- `010` doesn't show the operator, and hundreds of thousands of numbers are ported every month. Look up the current network when it matters.
- Marketing texts need explicit prior consent, the `(광고)` label with the sender's details, a free opt-out, a separate consent from 9 p.m. to 8 a.m. and reconfirmation every two years. Since 2025 and 2026, bulk senders must use certified providers, which block foreign IP addresses by default.

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

## Sources

1. [Telecommunications Number Management Rules (MSIT Notice 2021-93, as in force on 2026-11-03)](https://www.law.go.kr/%ED%96%89%EC%A0%95%EA%B7%9C%EC%B9%99/%EC%A0%84%EA%B8%B0%ED%86%B5%EC%8B%A0%EB%B2%88%ED%98%B8%EA%B4%80%EB%A6%AC%EC%84%B8%EC%B9%99) — Ministry of Science and ICT, via the Korea Law Information Center, 2021
2. [Act on Promotion of Information and Communications Network Utilization and Information Protection (Act 21988, in force 2 October 2026)](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%95%EB%B3%B4%ED%86%B5%EC%8B%A0%EB%A7%9D%EC%9D%B4%EC%9A%A9%EC%B4%89%EC%A7%84%EB%B0%8F%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%93%B1%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0) — Korea Law Information Center, 2026
3. [Enforcement Decree of the same Act, articles 61 to 62-3 and Annex 6 (labels and opt-out methods for commercial ads)](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%95%EB%B3%B4%ED%86%B5%EC%8B%A0%EB%A7%9D%EC%9D%B4%EC%9A%A9%EC%B4%89%EC%A7%84%EB%B0%8F%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%93%B1%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0%EC%8B%9C%ED%96%89%EB%A0%B9) — Korea Law Information Center, 2026
4. [Telecommunications Business Act (Act 21503, in force 1 October 2026): articles 22-11, 58 and 84-2](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EC%A0%84%EA%B8%B0%ED%86%B5%EC%8B%A0%EC%82%AC%EC%97%85%EB%B2%95) — Korea Law Information Center, 2026
5. [Notice on sender qualification certification standards (KMCC Notice 2026-1)](https://www.law.go.kr/LSW/flDownload.do?flSeq=163987069) — Korea Media and Communications Commission, via the Korea Law Information Center, 2026
6. [Act on the Establishment and Operation of the Korea Media and Communications Commission](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%B0%A9%EC%86%A1%EB%AF%B8%EB%94%94%EC%96%B4%ED%86%B5%EC%8B%A0%EC%9C%84%EC%9B%90%ED%9A%8C%EC%9D%98%EC%84%A4%EC%B9%98%EB%B0%8F%EC%9A%B4%EC%98%81%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0) — Korea Law Information Center, 2025
7. [Personal Information Protection Act (Act 21445, in force 11 September 2026)](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B2%95) — Korea Law Information Center, 2026
8. [Illegal spam response: reporting methods and procedure](https://www.kisa.or.kr/1060301) — Korea Internet & Security Agency (KISA), 2026
9. [Response to falsified caller numbers (spoofing): reporting and blocking services](https://www.kisa.or.kr/1020602) — Korea Internet & Security Agency (KISA), 2026
10. [Number porting barred for three months after a mobile sign-up (2 July 2009)](https://m.korea.kr/news/policyNewsView.do?newsId=148672872) — Korea Policy Briefing (korea.kr), 2009
11. [31,798 leave SKT in four days (5 January 2004)](https://www.seoul.co.kr/news/2004/01/05/20040105003005) — Seoul Shinmun, 2004
12. [End of the 2G era: MSIT approves LG U+ service shutdown (25 May 2021)](https://newstomato.com/ReadNews.aspx?no=1046529) — News Tomato, 2021
13. [June number porting picks up again (1 July 2026, citing KTOA figures)](https://www.ddaily.co.kr/page/view/2026070111394053626) — Digital Daily, 2026
14. [Kakao second-quarter 2024 results (8 August 2024)](https://www.kakaocorp.com/page/detail/11175) — Kakao Corp., 2024
15. [libphonenumber PhoneNumberMetadata.xml (region KR), carrier prefix data and release notes](https://github.com/google/libphonenumber/blob/master/resources/PhoneNumberMetadata.xml) — libphonenumber project (Apache License 2.0), 2026

## Frequently asked questions

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

Eleven digits at home, written 010-XXXX-XXXX, and ten digits after the country code +82, because the leading 0 is dropped. In E.164 a Korean mobile is +82 10 XXXX XXXX, twelve digits after the plus. The numbering rules assign 010 numbers as 010 plus a four-digit exchange starting with 2 to 9 and four more digits.

### What is the South Korea country code for WhatsApp and other apps?

+82. Drop the leading 0 of the national number: 010-2000-0000 becomes +82 10-2000-0000, stored as +821020000000. Don't keep the 0 after 82. The same E.164 form works for WhatsApp, SMS APIs and any other platform.

### Why do all Korean mobile numbers start with 010?

Since 1 January 2004 every new mobile subscriber in South Korea has been given an 010 number, under the national numbering rules. The older operator codes 011, 016, 017, 018 and 019 belonged to 2G networks. KT closed its 2G network in 2012, SK Telecom in 2020 and LG U+ at the end of June 2021, and 01X users had to move to 010.

### Can I tell the mobile operator from an 010 number?

No, not reliably. The numbering rules split 010 into four-digit exchanges held by operators, but number portability has run since 2004 and operators can share numbers, so the exchange says little about the current network. Mobile virtual network operators also use the same ranges. A live MNP or HLR lookup shows the current network.

### What do 070 and 1588 numbers mean in Korea?

070 is the code for internet telephony (VoIP) numbers, written 070-XXXX-XXXX. 1588 is one of the eight-digit nationwide representative numbers in the 15XX, 16XX and 18XX series, which companies use as one number for all their lines. They are dialled without an area code. Neither is a mobile number, so neither can receive an OTP by SMS reliably.

### What are the rules for marketing SMS in South Korea?

Article 50 of the Information and Communications Network Act requires the recipient's explicit prior consent for commercial ads. Ads sent between 9 p.m. and 8 a.m. need a separate consent, except by email. A text ad must start with (광고), which means 'advertisement', and show the sender's name and contact. It must also offer a free way to opt out, and consent must be reconfirmed every two years.

### Can I check if a Korean number uses KakaoTalk?

Not with MobileValidate. We don't offer a KakaoTalk check, even though KakaoTalk is the main messenger in South Korea. For Korean numbers we offer HLR, MNP and carrier lookups and checks for other apps such as WhatsApp and Telegram. We run them only for numbers you hold with a lawful basis, and unknown answers are not billed.
