Skip to main content
#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() به شرح زیر است:
  1. بررسی صحت کد ملی با Validator::nationalCode().
  2. در صورت معتبر بودن، سرچ در جدول City بر اساس سه رقم ابتدایی.
  3. بازگشت نام شهر در کلید data در صورت یافتن رکورد.
  4. در صورتی که رکوردی یافت نشود، پیام “شهر یافت نشد” بازگردانده می‌شود.
  5. در صورت نامعتبر بودن کد ملی، پیام “کد ملی نامعتبر” بازگردانده می‌شود.

ورودی‌ها (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\City
  • Validator::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 جلوگیری گردد.