# Turkey tax ID format: VKN and TCKN check digit validator

URL: https://fincodelabs.com/en/tools/turkey-tax-id-validator · Publisher: Fincode (Fincode Yazılım ve Teknoloji A.Ş.), Istanbul, Turkey · Updated: 2026-10-15

Paste a 10-digit Turkish tax number or an 11-digit identity number to see whether its length and check digits are well formed. The check runs in your browser; nothing is sent or stored. Free, no sign-up required.

## Calculator

The calculation runs in the browser in the form on this page: https://fincodelabs.com/en/tools/turkey-tax-id-validator

**Inputs**
- Tax number or identity number: 10 digits (VKN) or 11 (TCKN). Checked in your browser; nothing is sent or stored (default: 3882015834)

**Results:** Format and check digits, Read as, Digits, Check digit test

> Well formed means the digits follow the length and check-digit rules. It does not show that the number was issued, is registered or active, or belongs to the person or company you deal with. The check runs on this page only, and nothing you type is sent or stored. An identity number is personal data, so check only numbers you are entitled to handle.

## Turkish tax ID format: 10 or 11 digits

A Turkish tax ID has 10 digits for companies and for foreigners without a foreign identity number, and 11 digits for people who use their identity number as their tax number. The checker reads the length and applies the matching check-digit test.

**Numbers used as a tax ID in Turkey, as of 6 November 2026**

| Number | Digits | Used by |
| --- | --- | --- |
| Tax number (*vergi kimlik numarası*, VKN) | 10 | Companies and other entities; foreigners without a foreign identity number |
| Turkish identity number (*T.C. kimlik numarası*, TCKN) | 11 | Turkish citizens, as their tax number since 1 July 2006 |
| Foreign identity number (*yabancı kimlik numarası*) | 11, starting with 9 | Foreigners who hold one, as their tax number since 1 July 2010 |

The dates come from Tax Identification Number General Communiqués No. 3 (Resmî Gazete, 29 August 2006) and No. 4 (22 May 2010). Turkey has no separate VAT number: a company's VAT ID is its 10-digit tax number, which is why the [Turkey VAT number check](https://fincodelabs.com/en/blog/turkey-vat-number-check) guide starts with this format test. How a foreigner gets a number is in [Turkish tax number for foreigners](https://fincodelabs.com/en/blog/turkish-tax-number-for-foreigners).

## How the tax number (VKN) check digit works

The 10th digit of a tax number is a check digit computed from the first nine. We found no official publication of the formula; the steps below are the ones open-source validators use, and Fincode's own published tax number passes them.

1. Give the first nine digits positions from 9 down to 1: the first digit is position 9 and the ninth digit position 1.
2. For each digit, add its position and keep the last digit of the sum: c = (digit + position) mod 10.
3. If c is not 0, multiply it by 2 to the power of the position and take the remainder after dividing by 9; a remainder of 0 counts as 9. If c is 0, the digit adds nothing.
4. Add the nine results. The check digit is (10 − total mod 10) mod 10.

> **Worked example:** Fincode's own tax number, 3882015834, as printed on its company information page. This is the calculator's default value.
>
> **Check digit of 3882015834, step by step**
>
> | Digit | Position | c | c × 2^position mod 9 |
> | ---: | ---: | ---: | --- |
> | 3 | 9 | 2 | 7 |
> | 8 | 8 | 6 | 6 |
> | 8 | 7 | 5 | 1 |
> | 2 | 6 | 8 | 8 |
> | 0 | 5 | 5 | 7 |
> | 1 | 4 | 5 | 8 |
> | 5 | 3 | 8 | 1 |
> | 8 | 2 | 0 | 0 (skipped) |
> | 3 | 1 | 4 | 8 |
>
> The results add up to 46, so the check digit is (10 − 6) mod 10 = 4, which is the number's last digit: **well formed**. With 5 as the last digit, 3882015835, the test fails.

For any nine digits exactly one check digit passes, so one in ten random 10-digit numbers is well formed. The test catches any single mistyped digit; it cannot show that a number exists.

## How the identity number (TCKN) check digits work

An 11-digit identity number never starts with 0, and its last two digits are check digits. With the digits written d1 to d11:

**d10 = (7 × (d1 + d3 + d5 + d7 + d9) − (d2 + d4 + d6 + d8)) mod 10**

**d11 = (d1 + d2 + … + d10) mod 10**

This page prints no number that passes these tests, because any such number could be a real person's. As a failing example, 01234567890 fails at once, since an identity number cannot start with 0. Again we found no official publication of the formula; it is the one open-source validators use. Foreign identity numbers start with 9, and no official text gives their check digits either: the checker applies the same rule to them and says so under the field.

An identity number is personal data under Article 3 of Personal Data Protection Law No. 6698, which covers any information about an identified or identifiable person. Check only numbers you are entitled to process, and do not log or share them.

## The same checks in Python and JavaScript

Both versions test the format and check digits only. They were run on 6 November 2026 with Python 3.11 and Node.js 24: the three examples print the results shown in the comments, and the two versions gave the same verdict on 170,000 test numbers, as did an independent implementation.

```python
def vkn_is_well_formed(number: str) -> bool:
    """Turkish tax number (VKN): 10 digits and a matching check digit."""
    if len(number) != 10 or not (number.isascii() and number.isdigit()):
        return False
    digits = [int(ch) for ch in number]
    total = 0
    for i, digit in enumerate(digits[:9]):
        position = 9 - i                # 9 for the first digit, 1 for the ninth
        c = (digit + position) % 10
        if c:
            r = c * 2 ** position % 9
            total += r if r else 9
    return (10 - total % 10) % 10 == digits[9]

def tckn_is_well_formed(number: str) -> bool:
    """Identity number (TCKN): 11 digits, no leading 0, two matching check digits."""
    if len(number) != 11 or not (number.isascii() and number.isdigit()) or number[0] == "0":
        return False
    d = [int(ch) for ch in number]
    tenth = (7 * sum(d[0:9:2]) - sum(d[1:8:2])) % 10
    return d[9] == tenth and d[10] == sum(d[:10]) % 10

print(vkn_is_well_formed("3882015834"))   # True: Fincode's published tax number
print(vkn_is_well_formed("3882015835"))   # False: last digit changed
print(tckn_is_well_formed("01234567890"))  # False: cannot start with 0
```

```
function vknIsWellFormed(number) {
  if (!/^\d{10}$/.test(number)) return false;
  const d = [...number].map(Number);
  let total = 0;
  for (let i = 0; i < 9; i++) {
    const position = 9 - i;             // 9 for the first digit, 1 for the ninth
    const c = (d[i] + position) % 10;
    if (c) total += (c * 2 ** position) % 9 || 9;
  }
  return (10 - (total % 10)) % 10 === d[9];
}

function tcknIsWellFormed(number) {
  if (!/^[1-9]\d{10}$/.test(number)) return false;
  const d = [...number].map(Number);
  const odd = d[0] + d[2] + d[4] + d[6] + d[8];
  const even = d[1] + d[3] + d[5] + d[7];
  const tenth = (((7 * odd - even) % 10) + 10) % 10;
  const sum = d.slice(0, 10).reduce((a, b) => a + b, 0);
  return d[9] === tenth && d[10] === sum % 10;
}

console.log(vknIsWellFormed("3882015834"));   // true: Fincode's published tax number
console.log(vknIsWellFormed("3882015835"));   // false: last digit changed
console.log(tcknIsWellFormed("01234567890")); // false: cannot start with 0
```

## What a pass does not tell you

- **Registration:** whether the Revenue Administration (GİB) issued the number, and to whom, needs an official query; the VAT number check guide above lists the routes open to a foreign team.
- **Identity:** a well-formed number can be someone else's, and a format test does not replace any identity check that a rule requires.
- **Activity:** a company's number can be well formed while the company is closed.

In a form, the test is an early typing check with the official query behind it. Fincode builds fintech apps from a written scope; if yours needs checks like these, see [Fincode's fintech app development](https://fincodelabs.com/en/services/fintech-app-development).

## Which values to enter

- **Tax number or identity number:** 10 or 11 digits. Spaces, dots and dashes are ignored, and a TR prefix before 10 digits, which some systems add to VAT numbers, is set aside with a note.

The result shows the type read from the length, the number of digits and which check-digit test passed or failed. It never shows what a failing digit should be.

## Frequently asked questions

### What is the format of a Turkish tax ID number?

Companies, and foreigners without a foreign identity number, have a 10-digit tax number. Turkish citizens use their 11-digit identity number, and foreigners who hold one use their 11-digit foreign identity number, which starts with 9.

### Is the Turkish VAT number the same as the tax number?

Yes. Turkey issues no separate VAT number; a company's VAT ID is its 10-digit tax number.

### How can I verify that a Turkish tax number is real?

Only an official query can show that. This checker tests the format and check digit, which catches typing errors; GİB's verification and the routes open to foreign teams are covered in the Turkey VAT number check guide.

### Does this tool store or send the number I type?

No. The check runs in your browser with no request to any server, the field has autocomplete turned off, and nothing is saved.

### Can a well-formed tax number still be fake?

Yes. One in ten random 10-digit numbers passes the tax number test, so a pass shows only that the digits are consistent, not that the number was issued or is active.

## Sources

- [Resmî Gazete: Tax Identification Number General Communiqué No. 3, identity numbers as tax numbers, 29 August 2006, No. 26274 (Turkish)](https://www.resmigazete.gov.tr/eskiler/2006/08/20060829-13.htm)
- [Resmî Gazete: Tax Identification Number General Communiqué No. 4, foreign identity numbers, 22 May 2010, No. 27588 (Turkish)](https://www.resmigazete.gov.tr/eskiler/2010/05/20100522-16.htm)
- [Mevzuat: Personal Data Protection Law No. 6698, Article 3 (Turkish)](https://www.mevzuat.gov.tr/MevzuatMetin/1.5.6698.pdf)
- [python-stdnum: Turkish tax number (VKN) module, open-source check-digit rule](https://raw.githubusercontent.com/arthurdejong/python-stdnum/master/stdnum/tr/vkn.py)
- [python-stdnum: Turkish identity number (T.C. Kimlik) module, open-source check-digit rule](https://raw.githubusercontent.com/arthurdejong/python-stdnum/master/stdnum/tr/tckimlik.py)

> This calculator is general information, not tax, legal or investment advice. Results depend on the values you enter; rates, ceilings and amounts in Turkey change often, so check the date of each figure and the official source, and ask a licensed adviser about your own situation. Sources, checks and corrections: see the [editorial policy](https://fincodelabs.com/en/editorial-policy).

---

Published by Fincode (Fincode Yazılım ve Teknoloji A.Ş.), a software company in Istanbul, Turkey: https://fincodelabs.com/en/tools/turkey-tax-id-validator

Cite as: Fincode, "Turkey tax ID format: VKN and TCKN check digit validator", updated October 15, 2026, https://fincodelabs.com/en/tools/turkey-tax-id-validator
