[Çözüldü]  VKN Doğrulama algoritması

VBA Makrolar ile ilgili sormak istedikleriniz, yapmak istedikleriniz hakkında yardım alabileceğiniz bölümdür.

VKN Doğrulama algoritması

İleti#1)  ozcan27 » 17 Ağu 2016 15:58

Merhaba,

VKN (Vergi kimlik numarası) nın doğrulama algoritmasını nasıl yaparım? Bu konuda bana yardımcı olabilir misiniz?

Teşekkürler,
Kullanıcı avatarı
ozcan27
 
Kayıt: 17 Ağu 2016 15:43
Meslek: serbest meslek
Yaş: 38
İleti: 2
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: istanbul

Cevap: VKN Doğrulama algoritması

İleti#2)  Ozan İLGÜN » 18 Ağu 2016 10:16

Algoritmanın nasıl olduğunu söyleyen bir kaynak bulamadım.
Javascript kodları var.
Kod: Tümünü seç
function vergikimlik(kno) {
    var v1 = 0;
    var v2 = 0;
    var v3 = 0;
    var v4 = 0;
    var v5 = 0;
    var v6 = 0;
    var v7 = 0;
    var v8 = 0;
    var v9 = 0;
    var v11 = 0;
    var v22 = 0;
    var v33 = 0;
    var v44 = 0;
    var v55 = 0;
    var v66 = 0;
    var v77 = 0;
    var v88 = 0;
    var v99 = 0;
    var v_last_digit = 0;
    var toplam = 0;



    if (kno.length == 10) {

        v1 = (Number(kno.charAt(0)) + 9) % 10;

        v2 = (Number(kno.charAt(1)) + 8) % 10;

        v3 = (Number(kno.charAt(2)) + 7) % 10;

        v4 = (Number(kno.charAt(3)) + 6) % 10;

        v5 = (Number(kno.charAt(4)) + 5) % 10;

        v6 = (Number(kno.charAt(5)) + 4) % 10;
        v7 = (Number(kno.charAt(6)) + 3) % 10;
        v8 = (Number(kno.charAt(7)) + 2) % 10;
        v9 = (Number(kno.charAt(8)) + 1) % 10;
        v_last_digit = Number(kno.charAt(9));

        v11 = (v1 * 512) % 9;
        v22 = (v2 * 256) % 9;
        v33 = (v3 * 128) % 9;
        v44 = (v4 * 64) % 9;
        v55 = (v5 * 32) % 9;
        v66 = (v6 * 16) % 9;
        v77 = (v7 * 8) % 9;
        v88 = (v8 * 4) % 9;
        v99 = (v9 * 2) % 9;

        if (v1 != 0 && v11 == 0) v11 = 9;
        if (v2 != 0 && v22 == 0) v22 = 9;
        if (v3 != 0 && v33 == 0) v33 = 9;
        if (v4 != 0 && v44 == 0) v44 = 9;
        if (v5 != 0 && v55 == 0) v55 = 9;
        if (v6 != 0 && v66 == 0) v66 = 9;
        if (v7 != 0 && v77 == 0) v77 = 9;
        if (v8 != 0 && v88 == 0) v88 = 9;
        if (v9 != 0 && v99 == 0) v99 = 9;
        toplam = v11 + v22 + v33 + v44 + v55 + v66 + v77 + v88 + v99;


        if (toplam % 10 == 0) toplam = 0;
        else toplam = (10 - (toplam % 10));

        if (toplam == v_last_digit) {


            return true;
        } else return false;

    } else return false;

}

Bu algoritmadan yola çıkarak javascript kodlarını vba kodlarına çevirmeye çalışarak kafamda oluşturduğum bir algoritma var ama açık söylüyorum. :lol: Hiç güvenmiyorum. Sadece fikir vermesi açısından paylaşıyorum.
Bu aşağıda belirttiğim fonksiyona güvence vermiyorum. Kod kullanımından kaynaklı sorumluluk almıyorum


Kod: Tümünü seç
Sub KimlikGetir()
Dim vkn As String
vkn = "0123456789"
MsgBox vergikimlik(vkn)
End Sub
Function vergikimlik(kno As String) As Boolean
If Len(kno) <> 10 Then vergikimlik = False
  Dim v1, v2, v3, v4, v5, v6, v7, v8, v9, v11, v22, v33, v44, v55, v66, v77, v88, v99, v_last_digit, Toplam As Integer
  v1 = 0: v2 = 0: v3 = 0: v4 = 0: v5 = 0: v6 = 0: v7 = 0: v8 = 0: v9 = 0
  v11 = 0: v22 = 0: v33 = 0: v44 = 0: v55 = 0: v66 = 0: v77 = 0: v88 = 0: v99 = 0
  v_last_digit = 0: Toplam = 0
Dim desen

        v1 = (Mid(kno, 1, 1) + 9) Mod 10
        v2 = (Mid(kno, 2, 1) + 8) Mod 10
        v3 = (Mid(kno, 3, 1) + 7) Mod 10
        v4 = (Mid(kno, 4, 1) + 6) Mod 10
        v5 = (Mid(kno, 5, 1) + 5) Mod 10
        v6 = (Mid(kno, 6, 1) + 4) Mod 10
        v7 = (Mid(kno, 7, 1) + 3) Mod 10
        v8 = (Mid(kno, 8, 1) + 2) Mod 10
        v9 = (Mid(kno, 9, 1) + 1) Mod 10
        v_last_digit = Mid(kno, 10, 1)

        v11 = (v1 * 512) Mod 9
        v22 = (v2 * 256) Mod 9
        v33 = (v3 * 128) Mod 9
        v44 = (v4 * 64) Mod 9
        v55 = (v5 * 32) Mod 9
        v66 = (v6 * 16) Mod 9
        v77 = (v7 * 8) Mod 9
        v88 = (v8 * 4) Mod 9
        v99 = (v9 * 2) Mod 9

        If v1 <> 0 And v11 = 0 Then v11 = 9
        If v2 <> 0 And v22 = 0 Then v22 = 9
        If v3 <> 0 And v33 = 0 Then v33 = 9
        If v4 <> 0 And v44 = 0 Then v44 = 9
        If v5 <> 0 And v55 = 0 Then v55 = 9
        If v6 <> 0 And v66 = 0 Then v66 = 9
        If v7 <> 0 And v77 = 0 Then v77 = 9
        If v8 <> 0 And v88 = 0 Then v88 = 9
        If v9 <> 0 And v99 = 0 Then v99 = 9
        Toplam = v11 + v22 + v33 + v44 + v55 + v66 + v77 + v88 + v99


        If Toplam Mod 10 = 0 Then
        Toplam = 0
        Else
        Toplam = (10 - (Toplam Mod 10))
        End If
       
        If Toplam = v_last_digit Then

        vergikimlik = True
         Else
          vergikimlik = False
         End If
         End Function

Vkn yerine TCKN kullanmanız mümkünse onun algoritmasını kullanabilirsiniz.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2826
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul



Cevap: VKN Doğrulama algoritması

İleti#3)  ozcan27 » 18 Ağu 2016 12:56

Ozan bey, yardımlarınız için teşekkür ederim. ihtiyacımı fazlasıla karşıladı.
Kullanıcı avatarı
ozcan27
 
Kayıt: 17 Ağu 2016 15:43
Meslek: serbest meslek
Yaş: 38
İleti: 2
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: istanbul

Cevap: VKN Doğrulama algoritması

İleti#4)  takunya » 12 Haz 2019 14:26

Sağolun Ozan bey. Ufak tefek ayarlamalar ile VBA kodunuzu kullanıyorum. Test de ettim gayet güzel çalışıyor.
Kullanıcı avatarı
takunya
 
Adı Soyadı:orhan somuncu
Kayıt: 21 Mar 2009 16:16
İleti: 3
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: kayseri/merkez

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: VKN Doğrulama algoritması

İleti#5)  Ozan İLGÜN » 24 Haz 2019 07:47

İşinize yaramasına sevindim. İyi günler dilerim.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2826
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul




Forum Genel Makro Soruları

Online Kullanıcılar

Bu forumu görüntüleyenler: Google Adsense [Bot] ve 1 misafir

Bumerang - Yazarkafe