الگوریتم تشخیص درستی شماره‌ی ملی

نوشته حسین بهنودی در ۲۹ آذر ۱۳۹۸

شماره‌ی ملی یک‌ عدد ده‌ رقمی است که دارای سه بخش است.

  1. کد کنترل: یک عدد یک رقمی است که بر اساس الگوریتمی با استفاده از ۹ رقم بعدی محاسبه می‌شود.
  2. کد فرد: یک عدد ۶ رقمی است که در هر شهر برای هر فرد یکتاست.
  3. کد شهر: یک عدد ۳ رقمی است که محل صدور کارت ملی را مشخص می‌کند.
جایگاه ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
نمونه ۰ ۱ ۸ ۳ ۳ ۸ ۲ ۳ ۹ ۰
x کد فرد کد شهر

کد کنترل یا Check Digit، ابزاری است برای جلوگیری از خطاهای انسانی در ورود کدهای شناسایی. (مثل شماره حساب‌ بانکی یا …)

روش محاسبه کد کنترل

  1. هر رقم را در جایگاهش ضرب کنید. (غیر از کد کنترل)
2 x 1 = 2
3 x 8 = 24
4 x 3 = 12
5 x 3 = 15
6 x 8 = 48
7 x 2 = 14
8 x 3 = 24
9 x 9 = 81
10x 0 = 0
  1. همه اعداد بدست آمده را با هم جمع کنید.
s = 2 + 24 + 12 + 15 + 48 + 14 + 24 + 81 + 0 = 220
  1. حاصل جمع را بر عدد ۱۱ تقسیم کنید و باقیمانده آن را بدست آورید:
r = 220 % 11 = 0
  1. اگر بزرگتر یا مساوی ۲ بود از عدد ۱۱ کم کنید، اگر نه همان عدد را قرار دهید.
r <  2  =>  Check-Digit = r
r >= 2  =>  Check-Digit = 11-r
  1. اگر عدد بدست آمده با کد کنترل (رقم اول) مساوی نباشد شماره‌ی ملی نادرست است.

کنترل‌های دیگر

  • نباید در شماره‌ی ملی هیچ کاراکتری غیر از ارقام ۰ تا ۹ به کار رفته باشد.
  • شماره‌ی ملی باید ۸ تا ۱۰ رقم باشد. (کد شهر می‌تواند با ۱ یا ۲ صفر آغاز گردد. ولی کد هیچ شهری سه صفر نیست.)
  • شماره‌هایی که همه ارقامش تکراریست، نادرست می‌باشد. (مثل ۱۱۱۱۱۱۱۱۱۱ یا ۲۲۲۲۲۲۲۲۲۲ یا …)

سعی کنید یک برنامه‌ای بنویسید که عددی را بگیرد و چک کند، آن عدد می‌تواند شماره‌ی ملی باشد یا نه.