IBAN yapısı üç parçadan oluşur: başta ülke kodu, hemen ardından iki kontrol basamağı ve geri kalan kısmı oluşturan hesap bölümü. Bu yazıda bu üç parçanın her birinin hangi soruya cevap verdiğini, mod-97 kontrolünün neyi kanıtlayıp neyi kanıtlamadığını ve bazı ülkelerde hesap bölümünün içine gömülü olan ulusal kontrolü bulacaksınız.
IBAN hangi parçalara ayrılır?
Uluslararası standardın tanımladığı bölünme sabittir ve üç parçadan oluşur. İlk iki karakter ülke kodudur; numaranın hangi ülkenin numaralandırma düzenine ait olduğunu söyler. Üçüncü ve dördüncü karakterler ISO kontrol basamaklarıdır; bu ikisi numaranın bütünü üzerinden hesaplanır. Beşinci karakterden sonrası ise hesap bölümüdür ve standardın kendisi bu bölümün iç yapısını tanımlamaz.
| Parça | Konumu | Neyi söyler | Neyi söylemez |
|---|---|---|---|
| Ülke kodu | Baştaki iki karakter | Numaranın hangi ülke düzenine ait olduğunu | Hesabın o ülkede açıldığını |
| ISO kontrol basamakları | Üçüncü ve dördüncü karakter | Numaranın bütününün kendi içinde tutarlı olduğunu | Hesabın var olduğunu |
| Hesap bölümü | Beşinci karakterden sonrası | Bankayı ve hesabı tanımlayan yerel yapıyı | Ülkeye göre değişen kendi kurallarını |
Bu ayrımın önemli sonucu şudur: numaranın toplam uzunluğu da hesap bölümünün iç yapısı da ülkeye göre değişir. Standardın belirlediği şey ilk parçaların anlamı ve bütünün denetim yöntemidir; hesap bölümünün ayrıntısı her ülkenin kendi tanımına bırakılmıştır.
İki ISO kontrol basamağı tam olarak neyi doğrular?
Üçüncü ve dördüncü karakterler, numaranın tamamı üzerinden hesaplanan iki haneli bir kontroldür. Bu kontrol, numaranın herhangi bir yerine yanlışlıkla giren bir karakteri ya da yerleri değişmiş iki komşu karakteri yakalamak için vardır.
Kontrolün kapsamı numaranın tamamıdır. Bu yüzden tek bir hane yanlış yazıldığında ya da hesap bölümündeki iki karakter yer değiştirdiğinde kontrol tutmaz ve numara reddedilir. Bu, elle yazılmış bir numaranın sisteme girmeden önce yakalanmasını sağlar.
Ancak kontrolün söylediği şey bu kadardır: numara kendi kuralına göre tutarlıdır. Kontrol, numaranın bir banka tarafından üretildiğini, hesabın açık olduğunu ya da ödeme kabul edebileceğini göstermez. Bunlar tamamen ayrı bir sorgunun konusudur.
Hesap bölümünün içinde neden ikinci bir kontrol olabilir?
Çünkü bazı ülkeler kendi banka numaralandırma düzenlerini standardın öncesinde kurmuştu ve o düzenlerin içinde zaten bir kontrol vardı. Uluslararası numaraya geçildiğinde bu yerel kontrol kaldırılmadı; hesap bölümünün içinde kaldı.
Bunun sonucu, tek bir numaranın iki ayrı kontrol tarafından denetlenebilmesidir. Birinci kontrol numaranın bütününe bakar, ikincisi yalnızca hesap bölümünün kendi iç yapısına. İkisinin sonucu her zaman aynı olmak zorunda değildir: numara bütün olarak tutarlı olabilir, ama yerel kontrol tutmayabilir.
Böyle bir durumda yapılacak şey, hangi kontrolün başarısız olduğunu ayrı ayrı söylemektir. “Numara geçersiz” tek başına yeterli değildir; çünkü kullanıcı hangi parçayı düzelteceğini bilemez. İki kontrolün ayrı ayrı raporlanması, hatanın yerini görünür kılar.
Harfler mod-97 hesabında nasıl sayıya dönüşür?
mod-97 hesabının mantığı şudur: numaranın karakterleri belirli bir kuralla yeniden sıralanır, içindeki harfler sabit bir kurala göre sayıya çevrilir ve elde edilen büyük sayı 97’ye bölünerek kalanına bakılır. Kalanın belirli bir değer olması, kontrolün tuttuğunu gösterir.
Bu akışın üç özelliği vardır. Birincisi, harflerin sayıya çevrilmesi bir çeviri tablosuna dayanır; alfabedeki her harfin karşılığı sabittir. İkincisi, numaranın bir kısmı sona taşınır; çünkü hesap, kontrol basamaklarının numaranın sonunda yer aldığı bir düzene göre tanımlanmıştır. Üçüncüsü, ortaya çıkan sayı çok uzun olabilir; bu yüzden hesap genellikle parça parça yürütülür.
Hesabın bütün adımlarının burada tek tek yazılmaması bilinçlidir: amaç, numarayı denetlemek isteyen okuyucunun ne olduğunu anlamasıdır, hesabı elle yürütmesi değil. Elle yürütme, standardın kendi açıklamasına bakılarak ve yayımlanmış örneklerle yapılmalıdır.
ISO kontrolü geçen bir IBAN hesabın var olduğunu gösterir mi?
Göstermez. Kontrol yalnızca karakter dizisinin kendi içinde tutarlı olduğunu söyler. Numaranın bir bankaya ait olduğunu, hesabın açık olduğunu, hesabın kime ait olduğunu veya ödeme kabul edip etmediğini göstermez.
Bu ayrım, ödeme akışlarında kritik önemdedir. Bir numaranın biçimsel kontrolü geçmesi, o numaraya para gönderilebileceği anlamına gelmez. Gönderim kararı, hesabın gerçekten var olduğunun ayrı bir kaynaktan doğrulanmasına dayanmalıdır. İki adım birbirinin yerine geçmez: biçim kontrolü ucuzdur ve her girdide çalıştırılabilir; hesap doğrulaması yavaştır, dışarıya bağlıdır ve her zaman cevap vermeyebilir.
Bu yüzden arayüzlerdeki ifadeler de ayrı tutulmalıdır. Biçim kontrolünün sonucu “numara kendi kuralına uyuyor” diye anlatılmalıdır; “hesap doğrulandı” ifadesi ise yalnızca gerçekten bir hesap sorgusu yapıldığında kullanılmalıdır.
Geliştiriciler için: uzunluk farkı ve ülkeye göre ayırma
En sık yapılan hata, tek bir uzunluk varsayımıyla çalışan bir denetim yazmaktır. Numaranın toplam uzunluğu ülkeye göre değiştiği için, sabit bir uzunluk isteyen bir kontrol başka ülkelerin numaralarını haksız yere reddeder. Aynı şekilde sabit konumlara bölünmüş bir ayrıştırma da yanlış sonuç verir.
Doğru yaklaşım, ülke kodunu bir anahtar olarak kullanıp geri kalan kuralları veriden okumaktır. Ülke kodu, numaranın ilk iki karakteridir ve ayrıştırmanın doğal giriş noktasıdır. Uzunluk beklentisi, hesap bölümünün iç yapısı ve varsa yerel kontrol kuralı bu anahtara bağlı veri olarak durmalıdır; kodun içine serpiştirilmiş koşullar olarak değil.
İkinci nokta, sonuçların ayrı tutulmasıdır. Bütünsel kontrol ile yerel kontrol ayrı sonuçlar üretmelidir; biri diğerinin içinde eritilirse hangi parçanın sorunlu olduğu kaybolur. Ayrıca “kural yok” durumu, “kontrol başarısız” durumundan ayrı gösterilmelidir; bilinmeyen bir ülke kodu için başarısızlık raporlamak yanlış olur.
Üçüncü nokta, normalleştirmedir. Bu numaralar da boşluklarla gruplanarak yazılır. Sadeleştirme yapılmadan ayrıştırmaya geçilirse, aynı numara dört karakterli gruplara bölünmüş hâliyle farklı, bitişik hâliyle farklı okunur. Sadeleştirme, ayrıştırmanın ön koşuludur.
Dördüncü nokta, harf içeren numaralarda büyük küçük harf davranışıdır. Harflerin sayıya çevrildiği bir hesapta, büyük ve küçük harf aynı değere gitmelidir; aksi hâlde aynı numaranın iki yazımı iki farklı sonuç verir.
Beşinci nokta, hesabın parça parça yürütülmesidir. Numaranın sayı karşılığı çok uzun olabildiği için, bütün diziyi tek bir sayıya çevirip bölmeye çalışmak birçok ortamda taşma ya da kesinlik kaybı üretir. Doğru yol, hesabı dizinin başında küçük bir kalan değeri tutarak ilerlemektir.
Altıncı nokta, sınama verisidir. Bu numaralar için de gerçek hesap numaralarıyla sınama yapmak gerekli değildir. Yayımlanmış kurgusal örnekler ve kendi ürettiğiniz sentetik diziler, hesabın doğru çalıştığını göstermek için yeterlidir. Kurgusal veri üretimi ile çevrimiçi üreticilerden veri toplamanın farkları kurgusal veri üretimi ve çevrimiçi üreticiler yazısında karşılaştırılmıştır.
Sonraki adımlar
İlk adım, sisteminizde bu numarayı işleyen her yerde aynı sadeleştirme ve aynı ülke kodu ayrıştırmasının kullanıldığından emin olmaktır. İkinci adım, bütünsel kontrol ile yerel kontrolü ayrı sonuçlar olarak raporlamak ve “kural yok” durumunu ayrı göstermektir. Aracın bu numarayı hangi parçalara ayırdığını ve her parça için ne söylediğini görmek isterseniz numara doğrulama aracı sayfasında kurgusal bir örnek deneyebilirsiniz; mod-97’nin ait olduğu algoritma ailesi için kontrol basamağı algoritmaları yazısı, kontrol basamağı bulunmayan numaralar için ise kontrol basamağı olmayan numaralar yazısı tamamlayıcıdır.
Bu metindeki numara parçaları, mod-97 akışı ve doğrulama sonuçları yalnızca yapıyı göstermek için kurgulanmış sentetik örneklerdir; hiçbiri gerçek bir hesaba, bankaya veya hesap sahibine ait değildir ve biçimsel uygunluk hiçbir koşulda hesabın varlığına kanıt sayılamaz.