عضو کانال یوتیوب ما شوید.

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

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

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

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

همراه ما باشید.

 

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

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

  • ناحیه نارنجی (۳ رقم) :‌ کد شهرستان محل صدور شناسنامه
  • ناحیه زرد (۶ رقم) :‌ کد منحصر به فردی است که در محل صدور شناسنامه برای هیچ فرد دیگری در نظر گرفته نشده است ولی ممکن است در شهرستان دیگری همین کد برای فرد دیگری استفاده شود.
  • ناحیه قرمز (۱ رقم) : این عدد یک عدد کنترلی می‌باشد که با توجه به ۹ رقم دیگر قابل محاسبه می‌باشد.
روش محاسبه عدد کنترلی کدملی (رقم آخر سمت راست کدملی):
  • ابتدا تمام ارقام را با موقعیت آن ضرب می‌کنیم.
  • حاصل ضرب اعداد در موقعیت آن‌ها را با هم جمع می‌کنیم.
  • عدد بدست آمده را تقسیم بر ۱۱ می‌کنیم.
  • اگر باقیمانده‌ی بدست آمده کمتر از ۲ باشد باید رقم کنترلی برابر آن باشد در غیراینصورت باید رقم کنترلی برابر:
    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

 

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

موفق باشید.

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