APK xətaları

Azərbaycan IBAN nümunəsi necə yoxlanır

Səhifədə bir nömrə var: AZ84NABZ00000000137010002944. Bu, Mərkəzi Bankın qaydasındakı hesablama nümunəsidir. Hesab deyil. Pul göndərilmir.

İkinci sətir həmin nümunənin özüdür, yalnız son rəqəm dəyişib. O da hesab deyil.

Nümunə 28 simvoldur. AZ ölkədir. Sonrakı iki rəqəm nəzarətdir. Sonra dörd hərf gəlir. Qalan 20 simvol hesab yeridir. Qısa olanda əvvəlinə sıfır yazılır.

Yoxlama ISO 7064 qaydası ilədir, MOD 97-10. İlk dörd simvol sona keçir. Hərf rəqəm olur: A 10-dur, Z 35-dir. Alınan ədəd 97-yə bölünür. Qalıq 1-dirsə nəzarət rəqəmi düzdür. Bu, hesabın var olduğunu göstərmir.

NUMUNE = "AZ84NABZ00000000137010002944"
# Eyni nümunədir. Yalnız son rəqəm dəyişib. Hesab deyil.
POZUK = "AZ84NABZ00000000137010002945"

def qaliq(iban: str) -> int:
    metn = iban.replace(" ", "").upper()
    if not (len(metn) == 28 and metn.startswith("AZ")):
        raise ValueError("format")
    kecmis = metn[4:] + metn[:4]
    reqem = "".join(str(ord(h) - 55) if h.isalpha() else h for h in kecmis)
    return int(reqem) % 97

print(qaliq(NUMUNE))
print(qaliq(POZUK))