CarFinanceAgent / chatbot /tools /tckn_tool.py
emreceniklioglu
Initial commit: LangGraph multi-agent car finance chatbot
49102bb
Raw
History Blame Contribute Delete
2.14 kB
"""
tools/tckn_tool.py — TCKN Doğrulama Aracı
AGENTIC PATTERN: Tool Use
━━━━━━━━━━━━━━━━━━━━━━━━
@tool decorator ile LangChain/LangGraph'a kayıt edilir.
Agent, "bu TCKN geçerli mi?" sorusunu cevaplamak için
bu tool'u çağırır. LLM kendi başına checksum hesaplamaz;
sadece hangi tool'u çağıracağına karar verir.
Algoritma: Türk TC Kimlik No mod-11 doğrulama standardı
- 11 haneli, ilk hane 0 olamaz
- 10. hane: (d1+d3+d5+d7+d9)*7 - (d2+d4+d6+d8) mod 10
- 11. hane: (d1+d2+...+d10) mod 10
API çağrısı YOK — tamamen deterministik, senkron.
"""
from langchain_core.tools import tool
@tool
def validate_tckn(tckn: str) -> dict:
"""
Türk TC Kimlik Numarasını mod-11 algoritmasıyla doğrular.
Args:
tckn: Doğrulanacak TCKN (11 hane, string)
Returns:
{"valid": bool, "error": str | None, "masked": str}
"""
# Boşluk ve tire temizle
tckn = tckn.strip().replace(" ", "").replace("-", "")
# Format kontrolü
if not tckn.isdigit():
return {"valid": False, "error": "TCKN yalnızca rakamlardan oluşmalı.", "masked": ""}
if len(tckn) != 11:
return {"valid": False, "error": f"TCKN 11 hane olmalı, {len(tckn)} hane girildi.", "masked": ""}
if tckn[0] == "0":
return {"valid": False, "error": "TCKN 0 ile başlayamaz.", "masked": ""}
digits = [int(c) for c in tckn]
# 10. hane kontrolü
check10 = ((sum(digits[i] for i in range(0, 9, 2)) * 7) - sum(digits[i] for i in range(1, 8, 2))) % 10
if digits[9] != check10:
return {"valid": False, "error": "TCKN doğrulama hatası (10. hane).", "masked": _mask(tckn)}
# 11. hane kontrolü
check11 = sum(digits[:10]) % 10
if digits[10] != check11:
return {"valid": False, "error": "TCKN doğrulama hatası (11. hane).", "masked": _mask(tckn)}
return {"valid": True, "error": None, "masked": _mask(tckn)}
def _mask(tckn: str) -> str:
"""TCKN'nin ortasını gizler: 123****8901 formatında döner."""
if len(tckn) != 11:
return "***"
return tckn[:3] + "****" + tckn[7:]