الگوریتم تشخیص درستی شمارهی ملی
شمارهی ملی یک عدد ده رقمی است که دارای سه بخش است.
- کد کنترل: یک عدد یک رقمی است که بر اساس الگوریتمی با استفاده از ۹ رقم بعدی محاسبه میشود.
- کد فرد: یک عدد ۶ رقمی است که در هر شهر برای هر فرد یکتاست.
- کد شهر: یک عدد ۳ رقمی است که محل صدور کارت ملی را مشخص میکند.
جایگاه | ۱ | – | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | – | ۸ | ۹ | ۱۰ |
---|---|---|---|---|---|---|---|---|---|---|---|---|
نمونه | ۰ | – | ۱ | ۸ | ۳ | ۳ | ۸ | ۲ | – | ۳ | ۹ | ۰ |
– | x | – | کد فرد | – | کد شهر |
کد کنترل یا Check Digit، ابزاری است برای جلوگیری از خطاهای انسانی در ورود کدهای شناسایی. (مثل شماره حساب بانکی یا …)
روش محاسبه کد کنترل
- هر رقم را در جایگاهش ضرب کنید. (غیر از کد کنترل)
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
- همه اعداد بدست آمده را با هم جمع کنید.
s = 2 + 24 + 12 + 15 + 48 + 14 + 24 + 81 + 0 = 220
- حاصل جمع را بر عدد ۱۱ تقسیم کنید و باقیمانده آن را بدست آورید:
r = 220 % 11 = 0
- اگر بزرگتر یا مساوی ۲ بود از عدد ۱۱ کم کنید، اگر نه همان عدد را قرار دهید.
r < 2 => Check-Digit = r
r >= 2 => Check-Digit = 11-r
- اگر عدد بدست آمده با کد کنترل (رقم اول) مساوی نباشد شمارهی ملی نادرست است.
کنترلهای دیگر
- نباید در شمارهی ملی هیچ کاراکتری غیر از ارقام ۰ تا ۹ به کار رفته باشد.
- شمارهی ملی باید ۸ تا ۱۰ رقم باشد. (کد شهر میتواند با ۱ یا ۲ صفر آغاز گردد. ولی کد هیچ شهری سه صفر نیست.)
- شمارههایی که همه ارقامش تکراریست، نادرست میباشد. (مثل ۱۱۱۱۱۱۱۱۱۱ یا ۲۲۲۲۲۲۲۲۲۲ یا …)
سعی کنید یک برنامهای بنویسید که عددی را بگیرد و چک کند، آن عدد میتواند شمارهی ملی باشد یا نه.