الگوریتم اعتبارسنجی کدملی
در این نوشته روش تحلیل کدملی ایرانی را بررسی می کنیم و الگوریتم آن را به شما توضیح میدهیم و در انتها یک کد پایتون برای این اعتبارسنجی در اختیار شما قرار میدهیم.
الگوریتم اعتبارسنجی کدملی
تعریف: کدملی یک کد ۱۱ رقمی یکتا است که به هر شخص با ملیت ایرانی داده میشود.
- ناحیه نارنجی (۳ رقم): کد شهرستان محل صدور شناسنامه.
- ناحیه زرد (۶ رقم): کد منحصر به فردی است که در محل صدور شناسنامه برای هیچ فرد دیگری در نظر گرفته نشده است ولی ممکن است در شهرستان دیگری همین کد برای فرد دیگری استفاده شود.
- ناحیه قرمز (۱ رقم): این عدد یک عدد کنترلی هست که با توجه به ۹ رقم دیگر قابل محاسبه است.
روش محاسبه عدد کنترلی کدملی
- ابتدا تمام ارقام را با موقعیت آن ضرب میکنیم.
- حاصل ضرب اعداد در موقعیت آنها را با هم جمع میکنیم.
- عدد بدست آمده را تقسیم بر ۱۱ میکنیم.
- اگر باقیماندهی بدست آمده کمتر از ۲ باشد باید رقم کنترلی برابر آن باشد در غیراینصورت باید رقم کنترلی برابر 11-باقیمانده است.
نکته: تمام رقمهای عدد کدملی یکسان نمیشود. (مثلا همه ۸)
نکته: اگر در اعتبارسنجی کدملی میخواهید یک فیلد در نظر بگیرید طول کدملی را بین حداقل ۸ رقم تا حداکثر ۱۰ رقم در نظر بگیرید زیر کد شهرستان محل صدور اگر تهران باشد معمولا دو رقم سمت چپ ابتدایی کدملی صفر است و گاهی افراد در سیستمها آن را وارد نمیکنند زیرا این فیلد را یک فیلد عددی میبینند و در اصل ریاضیات صفر قبل عدد نیز قابل چشمپوشی است. تعدادی از شهرستانها نیز با یک صفر شروع میشوند.
def validate_iranian_national_code(code): code_len = len(code) if code_len > 10 or code_len < 8: return False if len(set(code)) == 1: return False if len(code) < 10: code = code.zfill(10) factors = [10, 9, 8, 7, 6, 5, 4, 3, 2] checksum = sum(int(code[i]) * factors[i] for i in range(len(code) - 1)) remainder = checksum % 11 last_digit = int(code[-1]) if remainder < 2: return remainder == last_digit else: return 11 - remainder == last_digit
اگر نیاز به آموزش های بیشتری در ارتباط با زبان برنامه نویسی پایتون دارید در بخش نظرات این نوشته برای ما بنویسید.
ارسال پاسخ