تطبیق شبا با کد ملی یا با نام: کدام برای تسویه بهتر است؟
اگر بتوانید تاریخ تولد را بگیرید، تطبیق شبا با کد ملی را بر تطبیق با نام ترجیح بدهید، چون املای فارسی نام در آن نقشی ندارد.
برای تسویه با فروشنده یا دریافتکننده، تطبیق شبا با کد ملی را بر تطبیق با نام ترجیح میدهم، به یک شرط: بتوانید تاریخ تولد را هم از او بگیرید. اگر نمیتوانید، تصمیم عوض میشود.
این نوشته برای تیمی است که میخواهد پیش از واریز بداند شبا مال کیست، و بین دو سرویس مردد است. فرض میکنیم راهنمای تطبیق شبا با نام صاحب حساب را خواندهاید یا نیازی ندارید؛ اینجا فقط معیار تصمیم میدهیم.
دو سرویس، دو کلید
تطابق کد ملی و شبا سه چیز میگیرد: کد ملی، تاریخ تولد، شبا. جواب بله یا خیر است.
تطبیق شبا با نام نام را بهجای کد ملی و تاریخ تولد میگیرد. جواب باز هم بله یا خیر است.
فرق در کلید تطبیق است، و همین فرق همه چیز را عوض میکند. کد ملی یکتاست و املا ندارد. نام املا دارد.
هزینهٔ املا
نام فارسی هیچوقت یک رشتهٔ واحد نیست. «محمدرضا» و «محمد رضا»، «علیاکبر» و «علی اکبر»، ی و ک عربی و فارسی، «سیّد» با تشدید و «سید» بیتشدید. هر تطبیق نام باید این را مدیریت کند، و هیچ مدیریتی کامل نیست. نتیجه: پاسخ منفی ناشی از نگارش، که کاربر درست را رد میکند.
در تطبیق با کد ملی این دسته خطا وجود ندارد، چون هیچ رشتهٔ فارسیای مقایسه نمیشود. صفحهٔ سرویس هم همین را میگوید؛ من اینجا اضافه میکنم که این برتری در عمل وقتی بزرگ است که کاربران زیاد دارید و نمیخواهید تیم پشتیبانی نامها را دستی تفسیر کند.
ولی تاریخ تولد مجانی نیست
هزینهٔ تطبیق با کد ملی در فرم است، نه در API. باید از هر کاربر تاریخ تولد بگیرید. برای برخی محصولات این طبیعی است (ثبتنام مالی که از اول کد ملی میگیرد). برای برخی دیگر، یک فیلد اضافه و دلیلی برای ترک فرم است.
پرسشهایی که باید جواب بدهید:
- آیا کاربرتان تاریخ تولدش را در همین فرم یا فرم قبلی داده؟ اگر بله، دوباره نپرسید.
- آیا فرد در موقعیتی است که مجبور به اثبات هویت است (دریافت تسهیلات، تسویه با مبلغ بالا)؟ آنجا فیلد اضافه پذیرفتنی است.
- آیا نام را از قبل دارید و کد ملی را نه؟ آنوقت تطبیق نام سادهتر است.
جدول تصمیم
| وضعیت | پیشنهاد من |
|---|---|
| کد ملی و تاریخ تولد از قبل دارید | تطبیق با کد ملی |
| فقط نام را دارید و فرم را نمیشود عوض کرد | تطبیق نام، با اعتماد کمتر |
| مبلغ واریز بالاست | کد ملی، چون خطای نگارشی ندارد |
| تعداد زیاد حساب با نامهای مرکب | کد ملی |
| میخواهید نام را به کاربر نشان بدهید | هیچکدام؛ استعلام شبا نام را برمیگرداند |
ردیف آخر را فراموش نکنید. هر دو تطبیق بله یا خیرند و نام برنمیگردانند. اگر میخواهید کاربر ببیند «واریز به حساب فلانی»، سرویس دیگری لازم دارید: استعلام شبا.
ترکیب دو روش
لازم نیست یکی را انتخاب کنید. یک الگوی معقول:
- در لحظهٔ ثبت شبا، تطبیق با کد ملی.
- اگر منفی بود، مسیر دوم: استعلام شبا و نشاندادن نام ثبتشده به مدیر داخلی (نه به کاربر)، برای بررسی انسانی.
چرا نه به کاربر؟ چون اگر نام صاحب شبا را به هر کاربری نشان بدهید، هر کسی میتواند با امتحانکردن شباهای تصادفی نام صاحبان آنها را بیرون بکشد. این را با کنترل دسترسی پنل خودتان مدیریت کنید.
نمونه درخواست
bash curl -X POST 'https://example.com/api/v1/iban-national-id-match/' \ -H 'Authorization: Bearer melli_live_…' \ -H 'Content-Type: application/json' \ -d '{"nationalCode":"0013542419","birthDate":"1370/01/05","iban":"IR760170000000000000000001"}'
مقادیر ساختگیاند: شبا فقط ساختار درستی دارد و به حساب واقعی اشاره نمیکند. ساختار فیلدها در مستندات API آمده است.
پیش از پرسش، شبا را خودتان بسنجید
شبا ساختار دارد: IR، دو رقم کنترلی، و بیستوچهار رقم در مجموع. میتوانید دو رقم کنترلی را سمت خودتان با محاسبهٔ باقیمانده بر ۹۷ بسنجید، و کد بانک را از جایگاه مشخصی در شبا بخوانید. شبای نامعتبر در API هم invalid_input میگیرد و هزینه ندارد، ولی کاربرتان بیدلیل منتظر میماند. راهنمای چرا شبا نامعتبر اعلام میشود علتهای رایج را آورده؛ نمیخواهم اینجا تکرارشان کنم.
کی دوباره بپرسید
نتیجهٔ مثبت تا وقتی شبا عوض نشده، دلیلی برای تکرار ندارد. دو استثنا:
- مبلغ واریز از حد مشخصی که خودتان تعیین کردهاید بالاتر میرود. شاید بخواهید برای واریزهای بزرگ دوباره بسنجید.
- مدت زیادی از آخرین بررسی گذشته. «مدت زیاد» را شما تعریف میکنید؛ هیچ عدد جهانی ندارم.
هر دو تصمیم ریسک شماست و پاسخ ثابتی ندارد. فقط مطمئن شوید «کی دوباره بپرسیم» در سیستم شما یک قاعدهٔ نوشتهشده باشد، نه عادتِ یک نفر.
پرسشهای رایج تیمها
اگر کاربر نام و کد ملی هر دو را داد، هر دو سنجش را بزنیم؟ لازم نیست. کد ملی کافی است و پرسش دوم هزینهای اضافه است.
اگر تطبیق با کد ملی منفی شد، تطبیق با نام را امتحان کنیم؟ من این کار را نمیکنم. نام اگر مثبت شود، اطمینان را بالا نمیبرد، چون مشکل اصلی املاست. بهتر است منفی را به بررسی انسانی بسپارید.
شبای ثبتشده را باید پنهان نشان بدهیم؟ بله، فقط چند رقم آخر. شبا را کامل در پنل نمایش ندهید مگر برای نقشی که واقعاً لازم دارد.
آنچه این سرویس نمیکند
- برای حساب شرکتی (شخص حقوقی) با کد ملی شخص حقیقی کار نمیکند. مالک حساب شرکت، شرکت است.
- نام صاحب حساب را برنمیگرداند.
- فعالبودن، مسدودی و موجودی حساب را نمیگوید.
- علت پاسخ منفی را تفکیک نمیکند.
- اگر شبا درست و کد ملی درست باشد ولی حساب مشترک باشد، رفتار سرویس را از مستندات نمیتوانم تأیید کنم؛ پیش از وعدهدادن بیازمایید.
مثال تصمیم در یک تسویهٔ فرضی
تصور کنید یک پلتفرم هر هفته به چند صد فروشنده پول میدهد. فروشندگان با کد ملی و تاریخ تولد ثبتنام کردهاند، پس تطبیق با کد ملی بیهزینهٔ فرم است. شبا را هنگام ثبت میسنجید و نتیجه را کنار شبا نگه میدارید. دو هفته بعد فروشندهای شبایش را عوض میکند: سنجش دوباره، نه انتقال نتیجهٔ قبلی. تسویهٔ هفتگی فقط به شباهایی میرود که نتیجهٔ مثبت دارند، و باقی در صف بررسی میمانند، نه رد.
برعکس، اگر همین پلتفرم فروشنده را بدون کد ملی میپذیرد و فقط نام فروشگاه را دارد، تطبیق با کد ملی اصلاً در دسترس نیست. آنجا مسئلهٔ اصلی شما تطبیق نیست، مسئلهٔ ثبتنام است.
خلاصه برای مرور بعدی
اگر تاریخ تولد را میتوانید بگیرید، تطبیق با کد ملی. اگر نمیتوانید، نام، با پذیرش اینکه بخشی از پاسخهای منفی ناشی از املاست. در هر دو حالت، پاسخ منفی را به بررسی دوم وصل کنید، نه رد قطعی.
وبسرویس مرتبط با این راهنما
API تطابق کد ملی و شبا
بررسی تعلق یک شبا به یک کد ملی.
راهنماهای مرتبط
پرسش و تجربه کاربران
اگر این راهنما جوابتان را نداد، همینجا بپرسید. پرسشها را تیمملی ایپیآی پاسخ میدهد و هر نظر پیش از انتشار بررسی میشود.
هنوز پرسشی ثبت نشده، اولین نفر باشید.
