من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

الگوریتم اعتبارسنجی کدملی

الگوریتم اعتبارسنجی کدملی
الگوریتم اعتبارسنجی کدملی

الگوریتم اعتبارسنجی کدملی

در این نوشته روش تحلیل کدملی ایرانی را بررسی می کنیم و الگوریتم آن را به شما توضیح می‌دهیم و در انتها یک کد پایتون برای این اعتبارسنجی در اختیار شما قرار می‌دهیم.

 

الگوریتم اعتبارسنجی کدملی

تعریف: کدملی یک کد ۱۱ رقمی یکتا است که به هر شخص با ملیت ایرانی داده می‌شود.

جدول اعتبارسنجی کدملی

  • ناحیه نارنجی (۳ رقم)‌:‌ کد شهرستان محل صدور شناسنامه.
  • ناحیه زرد (۶ رقم)‌:‌ کد منحصر به فردی است که در محل صدور شناسنامه برای هیچ فرد دیگری در نظر گرفته نشده است ولی ممکن است در شهرستان دیگری همین کد برای فرد دیگری استفاده شود.
  • ناحیه قرمز (۱ رقم)‌: این عدد یک عدد کنترلی هست که با توجه به ۹ رقم دیگر قابل محاسبه است.

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

  • ابتدا تمام ارقام را با موقعیت آن ضرب می‌کنیم.
  • حاصل ضرب اعداد در موقعیت آن‌ها را با هم جمع می‌کنیم.
  • عدد بدست آمده را تقسیم بر ۱۱ می‌کنیم.
  • اگر باقیمانده‌ی بدست آمده کمتر از ۲ باشد باید رقم کنترلی برابر آن باشد در غیراینصورت باید رقم کنترلی برابر 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

 

اگر نیاز به آموزش های بیش‌تری در ارتباط با زبان برنامه نویسی پایتون دارید در بخش نظرات این نوشته برای ما بنویسید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]