36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
def generate_id_algorithm(id_code: str) -> str:
|
|
"""
|
|
Calculates the verification code based on the reverse-engineered logic:
|
|
1. Iterate digits from right to left (index i = 0, 1, 2...).
|
|
2. Weights:
|
|
- If i < 8: Weight = 8 - i (Sequence: 8, 7, 6, 5, 4, 3, 2, 1)
|
|
- If i >= 8: Weight = i + 1 (Sequence: 9, 10, ...)
|
|
3. Sum = Sum(Digit * Weight)
|
|
4. Check Digit = Sum % 99
|
|
"""
|
|
# تمیزکاری ورودی (حذف فاصلهها و اطمینان از عددی بودن)
|
|
if not id_code.isdigit():
|
|
return "Error: ورودی باید فقط عدد باشد."
|
|
|
|
total_sum = 0
|
|
|
|
# پیمایش از راست به چپ
|
|
# reversed(id_code) ارقام را برعکس میکند
|
|
for i, char in enumerate(reversed(id_code)):
|
|
digit = int(char)
|
|
|
|
# تعیین وزن بر اساس ایندکس (مکان رقم از راست)
|
|
if i < 8:
|
|
weight = 8 - i
|
|
else:
|
|
weight = i + 1
|
|
|
|
total_sum += digit * weight
|
|
|
|
# محاسبه باقیمانده بر 99
|
|
check_digit = total_sum % 99
|
|
|
|
# فرمتدهی دو رقمی (مثلاً 6 میشود 06)
|
|
check_digit_str = f"{check_digit:02}"
|
|
|
|
return f"{id_code}{check_digit_str}" |