#P1384
POST /api/v2/trade/national
Route Info
| Method | Endpoint | Controller | Middleware | Purpose | دستهبندی عملکردی |
| POST | /api/v2/trade/national | UserController@nationalPrefix | domainAccess, ipTrust | شناسایی شهر بر اساس کد ملی | Trade / National Identification |
تحلیل عملکرد (Analysis)
این Endpoint وظیفهی بررسی صحت کد ملی و در صورت معتبر بودن، شناسایی شهر متناظر با سه رقم ابتدایی آن را بر عهده دارد. در صورتی که کد ملی از نظر ساختاری صحیح تشخیص داده شود، شناسهٔ شهر از مدل
City بر اساس مقدار national_prefix بازیابی میشود.مکانیزم شناسایی شهر
سیستم از سه رقم ابتدایی کد ملی برای یافتن پیششمارهٔ ملی (
national_prefix) در جدول شهرها استفاده میکند.SELECT * FROM cities WHERE national_prefix LIKE '%123%' LIMIT 1;
در این مثال، اگر کاربر کد ملی "1234567890" را ارسال کند، مقدار 123 به عنوان پیششماره استخراج خواهد شد.
منطق اعتبارسنجی کد ملی
فرایند منطقی تابع
nationalPrefix() به شرح زیر است:
- بررسی صحت کد ملی با
Validator::nationalCode(). - در صورت معتبر بودن، سرچ در جدول
Cityبر اساس سه رقم ابتدایی. - بازگشت نام شهر در کلید
dataدر صورت یافتن رکورد. - در صورتی که رکوردی یافت نشود، پیام “شهر یافت نشد” بازگردانده میشود.
- در صورت نامعتبر بودن کد ملی، پیام “کد ملی نامعتبر” بازگردانده میشود.
ورودیها (Inputs)
| پارامتر | نوع داده | الزامی | توضیح |
| code | String | بله | کد ملی (دهرقمی) جهت بررسی صحت و تشخیص شهر. |
نمونه درخواست:
{
"code": "0451234567"
}
خروجیها (Outputs)
خروجی موفق (شهر یافت شد)
{
"status": true,
"time": 1731926417,
"data": "تبریز"
}
خروجی معتبر اما بدون شهر
{
"status": true,
"time": 1731926417,
"data": "کد ملی صحیح می باشد. اما شهر یافت نشد"
}
خروجی نامعتبر (کد اشتباه)
{
"status": false,
"time": 1731926417,
"data": "کد ملی نامعتبر"
}
وابستگیها (Dependencies)
UserController::nationalPrefix(Request $request)App\Models\CityValidator::nationalCode()
تست و استفاده (Testing & Usage)
نمونه درخواست با Postman:
POST /api/v2/trade/national
Content-Type: application/json
{
"code": "4580021347"
}
موارد خطا (Typical Error Cases)
- کد ملی کوتاهتر از 10 رقم.
- تمامی ارقام تکراری (مثلاً 1111111111).
- عدم وجود رکورد در جدول City با پیششمارهٔ استخراجشده.
جزئیات پیادهسازی (Implementation)
public function nationalPrefix(Request $request)
{
if (Validator::nationalCode($request->code)) {
$Code = City::where('national_prefix', 'LIKE', '%' . substr($request->code, 0, 3) . '%')->first();
if (!is_null($Code))
return ['status' => true, 'time' => time(), 'data' => $Code->fa_name];
else
return ['status' => true, 'time' => time(), 'data' => 'کد ملی صحیح می باشد. اما شهر یافت نشد'];
} else
return ['status' => false, 'time' => time(), 'data' => 'کد ملی نامعتبر'];
}
نتیجهگیری (Conclusion)
این Endpoint، روشی سریع، سبک و بدون نیاز به احراز هویت برای شناسایی شهر بر اساس کد ملی کاربر ارائه میدهد. در پروژههای تجاری داخلی میتوان از آن برای ارائهٔ شناسهٔ مکانی خودکار در فرمهای ثبتنام یا رزرو بهره برد.
پیوست: نگهداری و امنیت
- دادهها بر پایهٔ lookup ساده از جدول
Cityهستند؛ نیاز به caching برای عملکرد بهتر. - ورودی کاربر باید قبل از query با regex فیلتر شود تا از Injection جلوگیری گردد.