trkit
Menü

Paketler

@trkit-app-pack/validate

TCKN, VKN, IBAN, telefon, plaka, posta kodu ve MERSİS doğrulama; hazır zod şemaları ve Türkçe hata mesajları.

.mdChatGPT'de açClaude'da aç
npm install @trkit-app-pack/validate zod

zod 4 önerilir; zod 3.25+ da desteklenir. zod kullanmıyorsanız saf fonksiyonları @trkit-app-pack/validate/core üzerinden içe aktarın.

Türkçe zod mesajları

import { z } from "zod";
import { zodTurkce } from "@trkit-app-pack/validate";

zodTurkce(z); // uygulama başında bir kez

z.string().min(3).parse("a");       // En az 3 karakter olmalıdır
z.email().parse("x");               // Geçerli bir e-posta adresi giriniz
z.number().max(10).parse(11);       // 10 veya daha küçük olmalıdır
z.object({ a: z.string() }).parse({}); // Bu alan zorunludur

Şemada verdiğiniz özel mesajlar korunur. Tanınmayan durumlarda zod'un kendi Türkçe yereline düşer.

zod şemaları

import { tckn, vkn, vergiNo, iban, telefon, cepTelefonu, plaka, postaKodu, mersis } from "@trkit-app-pack/validate";

const schema = z.object({ tckn, iban, telefon: cepTelefonu });
schema.parse({ tckn: "10000000146", iban: "tr33 0006 1005 1978 6457 8413 26", telefon: "0532 123 45 67" });
// { tckn: "10000000146", iban: "TR330006100519786457841326", telefon: "+905321234567" }

Özelleştirilebilir fabrikalar: tcknSchema(o), vknSchema(o), taxIdSchema(o), ibanSchema(o), phoneSchema({ mobileOnly?, message? }), plateSchema(o), postalCodeSchema(o), mersisSchema(o).

TCKN

isValidTckn("10000000146");   // true
maskTckn("10000000146");      // "100******46"
generateTckn();               // test verisi için geçerli rastgele numara

Algoritma: 11 hane, ilk hane 0 olamaz; 10. hane ((1,3,5,7,9. haneler toplamı × 7) − (2,4,6,8. haneler toplamı)) mod 10; 11. hane ilk 10 hanenin toplamı mod 10.

VKN ve vergi no

isValidVkn("1234567890");
detectTaxId("10000000146");   // "tckn"
detectTaxId("<10 hane>");     // "vkn" | null
isValidTaxId(v);              // fatura formlarındaki "TCKN / VKN" alanı
generateVkn();

IBAN

isValidTrIban("TR33 0006 1005 1978 6457 8413 26"); // true
parseTrIban("TR330006100519786457841326");
// { iban, bankCode: "00061", bankName: null, accountNumber: "0519786457841326" }
formatIban("TR330006100519786457841326"); // "TR33 0006 1005 1978 6457 8413 26"
isValidIbanChecksum("DE89370400440532013000"); // her ülke için mod-97

TR_BANK_CODES yaygın bankaların EFT kodlarını içerir (Ziraat 00010, Garanti BBVA 00062, İş Bankası 00064…).

Telefon

detectPhoneKind("0532 123 45 67");   // "mobile"
detectPhoneKind("0212 555 12 34");   // "landline"
detectPhoneKind("0850 123 45 67");   // "national"
toE164("0532 123 45 67");            // "+905321234567"
formatPhone("+905321234567");        // "0532 123 45 67"
maskPhone("05321234567");            // "0532 *** ** 67"
isValidMobilePhone(v);

Kabul edilen girişler: 0532…, 532…, +90 (532) …, 90532…, 0090532….

Plaka, posta kodu, MERSİS

isValidPlate("34 ABC 123");  // true
formatPlate("34abc123");     // "34 ABC 123"
isValidPostalCode("21100");  // true (ilk iki hane il kodu)
isValidMersis("0123456789000015");

Plaka kuralları: il kodu 01–81; 1 harf → 4–5 rakam, 2 harf → 3–4 rakam, 3 harf → 2–3 rakam; Ç, Ğ, İ, Ö, Ş, Ü, Q, W, X kullanılmaz.

Algoritmik doğrulama, numaranın gerçek bir kişiye/şirkete ait olduğunu kanıtlamaz.