Menü

CPF CNPJ doğrulama: Brezilya'nın iki numarası nasıl denetlenir

CPF ve CNPJ'nin neyi temsil ettiğini, iki numaranın yapı farkını, kontrol basamağı hesabının ortak mantığını ve biçim kontrolü ile kayıt durumunun neden ayrı şeyler olduğunu anlatıyoruz.

Yayın tarihi

  • CPF
  • CNPJ
  • vergi numarası

CPF CNPJ doğrulama, Brezilya’nın iki numara türünü aynı anda akla getirir; çünkü ikisi de aynı hesap ailesini kullanır ve ikisi de tek aşamada bitmeyen bir kontrolle sonlanır. Bu yazıda iki numaranın kimi temsil ettiğini, yapı olarak nerede ayrıldıklarını, kontrol basamağı hesabının ortak mantığını ve biçim kontrolünün neden kayıt durumu hakkında hiçbir şey söylemediğini bulacaksınız.

CPF ve CNPJ sırasıyla neyi temsil eder?

İki numara aynı ülkenin vergi numaralandırma düzenine aittir ama farklı özneleri işaret eder. CPF gerçek bir kişiye karşılık gelir; yani bir insanın vergi kimliğidir. CNPJ ise bir işletmeye karşılık gelir; şirket, ortaklık veya benzeri bir tüzel yapı bu numarayla tanımlanır.

Bu ayrım yalnızca tanım düzeyinde kalmaz, hesap tarafında da sonuç doğurur. İki numara türü aynı aileden gelse bile parametreleri aynı değildir; bu yüzden bir tür için yazılmış bir denetim, diğerinin numaralarını doğru değerlendirmez.

Uygulama tarafında bu, tek bir “Brezilya numarası” alanı yerine iki ayrı alan gerektiği anlamına gelir. Kişi kaydı ile işletme kaydı ayrı formlarda toplanıyorsa, ayrım zaten kendiliğinden ortaya çıkar; ama aynı alanda toplanıyorsa hangi türün beklendiği açıkça belirtilmelidir.

İki numaranın yapı farkı nerede başlar?

Fark, numaranın ilk bakışta görünen kısmındadır: iki türün hane sayısı aynı değildir. İkinci fark, kullanılan ayırıcı işaretlerin alışılmış yazımındadır. Üçüncü ve en önemli fark ise hesabın parametreleridir; iki tür, aynı iskeleti farklı ağırlıklarla çalıştırır.

Karşılaştırma CPF CNPJ
Temsil ettiği özne Gerçek kişi İşletme veya tüzel yapı
Kontrol basamağı Var, hesabın sonunda Var, hesabın sonunda
Hesabın iskeleti Ağırlıklı toplam ve mod Ağırlıklı toplam ve mod
Yazımda görülen ayırıcılar Nokta ve tire Nokta, eğik çizgi ve tire
Kayıt durumu Ayrı bir sorgunun konusu Ayrı bir sorgunun konusu

Tablonun son satırı en çok atlanan satırdır. İki numara türü için de biçimsel denetim, numaranın yalnızca kendi kuralına uyduğunu söyler. Tablonun üst satırları ise karşılaştırma amacıyla, iki türün ortak iskeletini göstermek için verilmiştir; her iki düzenin ayrıntılı yapısı ve hangi katmanları yayımladığı ilgili kurumun kendi tanımına bağlıdır ve uygulama her zaman o tanım esas alınarak yazılmalıdır.

Yapı farkının bir sonucu da şudur: bir formda iki türün aynı alanda toplanması, kullanıcıya hangi numarayı yazacağını söylemez. Alanın etiketi yalnızca “numara” diyorsa, kullanıcı elindeki numaranın hangi türe ait olduğunu kendi bilgisine göre seçer ve yanlış türü yazarsa iki denetim de tutmaz. Doğru numara haksız yere reddedilmiş olur.

Bunun önüne geçmenin yolu, türü girdinin bir parçası yapmaktır. Kullanıcı türü seçer, denetim yalnızca o türün kurallarını uygular. Alternatif olarak araç her iki türü de sırayla deneyebilir; ama bu durumda hangi türün tuttuğunu açıkça söylemesi gerekir, çünkü aynı dizi iki türün biçim beklentisini nadiren birlikte karşılar.

Üçüncü bir yol, türü numaranın kendisinden çıkarmaya çalışmaktır. Bu yol yanıltıcıdır: hane sayısı ipucu verse bile, tek başına tür belirlemek için yeterli bir kanıt değildir ve yanlış bir çıkarım kullanıcıya gösterilen sonucu bozar.

Kontrol basamağı hesabının ortak mantığı nedir?

İki tür de aynı aileden gelir: önce numaranın kontrol basamakları dışındaki haneleri belirli ağırlıklarla çarpılır, çarpımlar toplanır, toplam bir modüle bölünür ve elde edilen kalandan bir tamamlayıcı üretilir. Bu tamamlayıcı, kontrol basamağının kendisidir.

İki türü ayıran şey bu akış değil, akışa verilen parametrelerdir. Ağırlık dizisi ve modül türden türe değişir. Ayrıca iki türün denetimi de tek aşamada bitmez: ilk kontrol değeri hesaplandıktan sonra numaraya eklenir ve ikinci değer, ilkini de kapsayan genişletilmiş dizi üzerinden hesaplanır.

Bu aşamalı yapı, hesabın önemli bir özelliğidir. Yalnızca ilk kontrol değerini doğrulayan bir denetim, numaranın kalanındaki hataları görmez. Denetimin bütün aşamaları sınaması gerekir; aksi hâlde numaranın sonu serbest kalır.

Ailenin ortak yapısı ve modül seçiminin sonuçları için kontrol basamağı algoritmaları yazısına bakabilirsiniz.

Aynı rakamların tekrarlandığı diziler neden ayrıca dışlanır?

Çünkü bazı diziler, basit mod hesaplarının çoğunu kendiliğinden sağlar. Aynı rakamın art arda tekrarlandığı bir dizi, ağırlıklı toplamda öngörülebilir bir sonuç üretir ve kontrol basamağı hesabı tesadüfen tutabilir. Böyle bir dizi biçimsel olarak tutarlı görünür ama gerçek bir numaralandırma düzeninde karşılığı yoktur.

Bu yüzden düzenin kendi açıklaması, bu tür dizileri açıkça dışarıda bırakır. Dışlama kuralı, hesabın bir parçası değil, hesabın yanında duran ayrı bir koşuldur. Bir denetim yalnızca mod hesabını uygular ve dışlama kuralını atlarsa, bu dizileri geçerli sayar.

Pratik sonuç şudur: bir denetimin doğru olması için yayımlanmış bütün koşulları uygulaması gerekir. Yalnızca en görünür adımı uygulamak, denetimi eksik bırakır. Sınama kümesinde bu yüzden hem dışlanan dizilerden hem de normal numaralardan örnek bulunmalıdır.

Biçim kontrolü ile kayıt durumu neden karıştırılmamalı?

Çünkü ikisi iki farklı kaynaktan beslenir. Biçim kontrolü tamamen eldeki numaraya bakar; hesap yereldir, hızlıdır ve her zaman çalışır. Kayıt durumu ise numaranın bir kurumun kaydında bulunup bulunmadığıdır; bu bilgi numaranın içinde yoktur ve yalnızca dışarıdan sorgulanabilir.

İkisini tek bir sonuçta birleştirmenin iki zararı vardır. Birincisi, kullanıcıya yanlış bilgi verilir: biçimsel olarak tutarlı bir numara “onaylandı” gibi gösterildiğinde, arkada hiçbir kayıt sorgusu yapılmamış olabilir. İkincisi, ayrım kaybolduğunda hata ayıklama da zorlaşır; hangi adımın başarısız olduğu bilinemez.

Doğru gösterim üç durumu ayırır: biçim uyuşuyor mu, kontrol basamakları tutuyor mu, kayıt durumu ne? İlk iki soru yerel olarak cevaplanır; üçüncüsü ayrı bir sorgunun sonucudur ve gecikebilir, başarısız olabilir. Üç durumun ayrı gösterilmesi, kullanıcıya da geliştiriciye de ne olduğunu anlatır.

Geliştiriciler için: sadeleştirme, maskeleme ve hata mesajları

Giriş alanına yazılan numara nadiren bitişik gelir. Nokta, tire ve eğik çizgi alışılmış yazımın parçasıdır; kopyala yapıştır sırasında başa görünmez karakterler eklenebilir. Bu yüzden ilk iş, numarayı sadeleştirmektir. Sadeleştirme yapılmazsa aynı numara, yazımına göre farklı uzunlukta görünür ve uzunluk kontrolü haksız yere başarısız olur.

İkinci iş, ekranda gösterilen biçim ile denetlenen biçimi ayırmaktır. Alışılmış ayırıcılarla gösterim okunabilirlik sağlar; ama denetim her zaman sadeleştirilmiş dizi üzerinde yapılmalıdır. Bu ayrım yapılmazsa, kullanıcı ekranda gördüğü numarayı düzeltirken sistem başka bir dizeyi denetler.

Üçüncü iş, hata mesajlarını katmana göre ayırmaktır. Beklenen hane sayısına uymayan bir girdi için söylenecek şey, son hanenin hesabının tutmadığı bir girdiden farklıdır. İkisini aynı metinle bildirmek, kullanıcıyı yanlış yeri düzeltmeye yöneltir.

Dördüncü iş, iki numara türünü karıştırmamaktır. Aynı alanda iki türü birden kabul eden bir tasarım, hangi türün beklendiğini kullanıcıya sordurmuyorsa iki denetimi de bulanıklaştırır. Tür ayrımı veri olarak taşınmalıdır.

Son olarak, sınama kümesi çeşitlendirilmelidir. Yalnızca geçerli örneklerle sınanan bir denetim, hatalı girdiyi yakalamadığı hâlde doğru görünür. Kümede eksik haneli, fazla haneli, yanlış karakter içeren ve dışlanan dizi örnekleri bulunmalıdır.

Sınama verisinin nereden geldiği de bu noktada önemlidir. Gerçek kayıtlardan alınmış numaralarla sınama yapmak, hem gereksiz veri taşır hem de sonradan temizlenmesi zor bir birikim yaratır. Kurgusal örneklerle çalışmanın nasıl kurulacağı, sınama verisi üretimi ile çevrimiçi kaynaklardan veri toplama arasındaki fark kurgusal veri üretimi ve çevrimiçi üreticiler yazısında karşılaştırılmıştır.

Sonraki adımlar

İlk adım, iki numara türünü ayrı alanlar olarak modellemek ve her biri için sadeleştirme ile uzunluk beklentisini ayrı tanımlamaktır. İkinci adım, doğrulama çıktısını biçim, kontrol basamağı ve kayıt durumu olarak üç ayrı sonuca bölmektir. Elinizdeki bir numaranın hangi kısmının çözülebildiğini görmek için numara doğrulama aracına yapıştırabilirsiniz; birden çok numara türünün aynı anda nasıl değerlendirildiği için ulusal kimlik doğrulama yazısı, hesabın aile içindeki yeri için kontrol basamağı algoritmaları yazısı yol gösterir.

Metinde anlatılan numara yapıları ve doğrulama sonuçları yalnızca biçimsel anlatımı örneklemek için üretilmiş kurgusal değerlerdir; gerçek bir kişinin ya da işletmenin vergi numarasına karşılık gelmez ve hiçbir kayıt durumunu göstermez.

Okumaya devam edin

TC Kimlik Doğrulayıcı hakkında makaleler