What is it for?

Try forms, APIs and databases with Turkey-specific fields without real people’s data: test TC kimlik no and IBAN validation, fill a demo database, prepare CSV or JSON imports.

Tick the fields, enter a count from 1 to 1,000, add a seed for reproducible output and press “Generate test data”. The validator tab checks pasted TCKN, VKN and IBAN values line by line.

How are the TCKN check digits calculated?

A TCKN has 11 digits and the first cannot be 0. Digit 10 is the sum of the odd-position digits (1, 3, 5, 7, 9) times 7, minus the sum of the even-position digits (2, 4, 6, 8); digit 11 is the sum of the first ten digits. Both are taken modulo 10, and because the first value can be negative, JavaScript needs ((x % 10) + 10) % 10.

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

Example 10000000146: odd positions give 1+0+0+0+1 = 2, and 2 × 7 = 14; even positions sum to 0; 14 mod 10 = 4, so digit 10 is 4. The first ten digits sum to 6, so digit 11 is 6. It matches the -(3 × odd sum + even sum) mod 10 form in python-stdnum.

The VKN algorithm

A VKN has 10 digits. The tool uses the commonly used algorithm; an official GİB algorithm could not be verified. Number the first nine digits i = 1…9 from the right. For each digit d, c1 = (d + i) mod 10. If c1 is 0 the contribution is 0; otherwise c2 = (c1 × 2^i) mod 9, with 0 becoming 9. The check digit is (10 − sum of c2) mod 10.

Example: 454053692 gives c2 values 6, 4, 9, 4, 0, 6, 2, 3, 6 from right to left; the sum is 40 and the check digit 0, so 4540536920 is valid and 4540536921 is not. Source: python-stdnum vkn module.

TR IBAN structure and MOD 97

A TR IBAN has 26 characters: TR, 2 check digits, a 5-digit payment service provider code (commonly called the bank code), a reserve digit 0 and a 16-character account number, left-padded with zeros. The structure follows article 4 and annexes 2–3 of the Central Bank’s Tebliğ 2008/6, consolidated through 2021: Tebliğ text.

TR kk bbbbb 0 aaaaaaaaaaaaaaaa
kk = 98 − (n mod 97)   n: BBAN + "TR00", first 4 characters moved to the end, A=10 … Z=35

The check digits use ISO 7064 MOD 97-10: join TR00 and the BBAN, move the first four characters to the end, turn letters into numbers (A=10 … Z=35; T=29, R=27) and write 98 − (n mod 97) with two digits. A valid rearranged IBAN leaves remainder 1 modulo 97. Example: bank code 00001 and account 0000000000000001 give TR610000100000000000000001. The Tebliğ allows letters A–Z in the account area; the validator accepts them, the generator makes digits only.

With an empty bank code each row gets a random one. Real bank codes were not verified, so there is no code list; a random code, even 99999, is not guaranteed to be fictional, assigned or unassigned.

Why are phone and address format-only?

A mobile number looks like +90 5XX XXX XX XX; the tool makes a 5 plus 9 random digits. No officially reserved fictional range could be verified, so this is only a format. It is a format-valid sample and may belong to a real subscriber. Do not call these numbers or send SMS to them; use them only in test environments that send no SMS.

Addresses combine the tool’s own small lists: invented streets such as “Test Sokak” or “Deneme Caddesi”, a random building number, a real province name and a format-only 5-digit postcode. These synthetic combinations may coincide with real addresses; never use them for deliveries. The output labels them fictional addresses. Names are invented combinations.

Responsible use

  • Never use the data for identity, payment or official forms.
  • Random values can coincide with real records.
  • Real personal data must be handled appropriately under Law No. 6698 (KVKK); prefer test data over real customer data in staging and demos.
  • Keep the markers: the table caption, the # TEST DATA CSV line and the _test_data JSON flag.

The tool makes no NVİ, MERNİS or GİB query, looks up no real person or account and sends no network request.

Limits

  • The validator is mathematical only: it does not check whether a number belongs to a real person, company or account.
  • Generator and validator handle at most 1,000 rows each.
  • A seed has up to 32 ASCII letters, digits, _ or -. The same seed and settings give the same output; switching a field off leaves other columns unchanged. A new version may change the output.
  • In CSV, cells starting with +, =, - or @ get a leading ' so spreadsheets do not run them as formulas; the phone column shows '+90 …. The first line is a # note; skip it when importing.

Algorithms and vectors were rechecked against their sources on 11 October 2026.

Frequently asked questions

Are these numbers real?

They are generated randomly; we cannot guarantee that they do not coincide with real records. The output is test data only, not for identity, payment or official procedures.

Why does validation pass?

Because validation checks only the checksum, the mathematical rule. A valid check digit does not show that a number belongs to anyone.

Does the validator say whether a number is real?

No. It sends no request to NVİ, MERNİS, GİB or banks; it checks length, first digit, check digits and the IBAN reserve digit, and explains each failure.

Can I get the same output again?

Yes: the same seed and settings give the same rows. With an empty seed the browser’s crypto.getRandomValues is used and every run differs.

Is the data sent anywhere?

No. Everything is generated in your browser. A share link carries settings and seed only if you tick the box, never the rows.

Published: · Updated: