APK hataları

Azerbaycan IBAN örneği nasıl yoklanır

Sayfada bir numara var: AZ84NABZ00000000137010002944. Bu, Merkez Bankası kuralındaki hesaplama örneğidir. Hesap değildir. Para gönderilmez.

İkinci satır aynı örneğin kendisidir, yalnızca son rakam değişmiştir. O da hesap değildir.

Örnek 28 simvoldur. AZ ülkedir. Sonraki iki rakam denetimdir. Sonra dört harf gelir. Kalan 20 simvol hesap yeridir. Kısa olunca başına sıfır yazılır.

Yoklama ISO 7064 kuralıyadır, MOD 97-10. İlk dört simvol sona geçer. Harf rakam olur: A 10'dur, Z 35'tir. Çıkan sayı 97'ye bölünür. Kalan 1 ise denetim rakamı doğrudur. Bu, hesabın var olduğunu göstermez.

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))