FilemakerTurk, AYS Bilişim ve Beyaz Net tarafından desteklenmektedir.
Filemaker Danışmanınız
AYS Bilişim
Mehmet KAYA
 0532 231 07 27
 0216 318 55 80
 mkaya@aysbilisim.net
						

Vkn Algoritma fm de yapılabilirmi?

+3 oy
1,021 kez görüntülendi

Vkn

 

public static bool vknValidation(string vkn)

        {

            long 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,

            lastDigit = 0, sum = 0;

            if (vkn.Length == 10)

            {

                v1 = ((long)Char.GetNumericValue(vkn[0]) + 9) % 10;

                v2 = ((long)Char.GetNumericValue(vkn[1]) + 8) % 10;

                v3 = ((long)Char.GetNumericValue(vkn[2]) + 7) % 10;

                v4 = ((long)Char.GetNumericValue(vkn[3]) + 6) % 10;

                v5 = ((long)Char.GetNumericValue(vkn[4]) + 5) % 10;

                v6 = ((long)Char.GetNumericValue(vkn[5]) + 4) % 10;

                v7 = ((long)Char.GetNumericValue(vkn[6]) + 3) % 10;

                v8 = ((long)Char.GetNumericValue(vkn[7]) + 2) % 10;

                v9 = ((long)Char.GetNumericValue(vkn[8]) + 1) % 10;

                lastDigit = (long)Char.GetNumericValue(vkn[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; }

                sum = v11 + v22 + v33 + v44 + v55 + v66 + v77 + v88 + v99;

                sum = (sum % 10 == 0) ? 0 : (10 - (sum % 10));

                return (sum == lastDigit) ? true : false;

            }

            return false;

        }

12, Ocak, 2017 Server kategorisinde Muhteshem (53,030 puan) tarafından soruldu

3 Cevaplar

0 oy
 
En İyi Cevap

Ekli dokümanı inceleyebilirsiniz.

Algoritmasını http://www.excel.web.tr/f50/veri-giri-i-yaparken-vergi-kimlik-nosunun-sistematik-t131847.html adresindeki tarife göre yaptım.

14, Ocak, 2017 InDusTry (27,210 puan) tarafından cevaplandı
15, Ocak, 2017 F. Osman Cabi tarafından seçilmiş
Küçük bir önerim var. Scripte VKN alanı bir çok yerde geçiyor. Bu scripti kendi çözümümüze kopyaladığımızda bazı satırlarda "field missing"ler olacak. Bunu engellemek için 1. adımda vkn'yi bir değişkene alıp sonra değişken üzerinden kullanmak bu sorunu çözebilir.
Bu arada bu işlemleri script yerine hesaplama (calculation) kullanarak "custom function" oluşturup, Briandunning.com'da yayımlanabilir.
Güzel fikir, yapabilir miyim bi bakıcam. ;)
Hocam ellerine sağlık. Çok zahmetli bir script olmuş.
bir hata var sanki, Cabitaş'ın vergi numarasını kabul etmiyor.
ilk fırsatta kontrol edeyim, özelden numarayı yazar mısın üstad.
Eğer scriptte hata yoksa algoritmayı aldığım sitede hata olabilir.
0 oy
Custom Function (TCNoDogrulama; TcNo)

Let ( [
ATCNO = Int( TcNo / 100 ) ;
BTCNO = Int( TcNo / 100 ) ;
C1 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C2 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C3 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C4 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C5 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C6 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C7 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C8 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
C9 = Mod ( ATCNO ; 10 ) ;
ATCNO = Int( ATCNO / 10 ) ;
TEKLER = C1+C3+C5+C7+C9 ;
CIFTLER = C2+C4+C6+C8 ;
Q1 = Mod ((10 - Mod ( TEKLER * 3 + CIFTLER ; 10 )) ; 10);
Q2 = Mod ((10 - Mod ( ( CIFTLER + Q1 ) * 3 + TEKLER ; 10 )) ; 10);
SonKN = BTCNO * 100  + Q1 * 10  + Q2
];

If (  SonKN = TcNo  ; 1 ; 0 )
)
14, Ocak, 2017 Mehmet KAYA (166,370 puan) tarafından cevaplandı
Sonuç 1 ise doğru bir TC No girdiniz. Sonuç 0 ise yanlış bir TcNo girdiniz.
VKN: Vergi Kimlik Numarası : 10 haneli
TCKN: TC Kimlik Numarası:    11 haneli
bildiğim kadarıyla.
Üstadım bu cevabı TCKN sorusuna mı taşısak. Arayan doğru yerde bulsa.
0 oy

Scripti düzenledim, calculation üzerinde çalışıyorum :)

16, Ocak, 2017 InDusTry (27,210 puan) tarafından cevaplandı
16, Ocak, 2017 InDusTry tarafından düzenlendi
Calculation ı beceremedim :) aşağıdaki ale getirdim ama sonuçlar hatalı çıkıyor.
Kontrol edebilir misiniz.

Let ([
        z1=Mod(Middle(Number;1;1)+9;10)*512;
        z2=Mod(Middle(Number;2;1)+8;10)*256;
        z3=Mod(Middle(Number;3;1)+7;10)*128;
        z4=Mod(Middle(Number;4;1)+6;10)*64;
        z5=Mod(Middle(Number;5;1)+5;10)*32;
        z6=Mod(Middle(Number;6;1)+4;10)*16;
        z7=Mod(Middle(Number;7;1)+3;10)*8;
        z8=Mod(Middle(Number;8;1)+2;10)*4;
        z9=Mod(Middle(Number;9;1)+1;10)*2;
        check_digit=Middle(Number;10;1);
        a1=Mod(z1;9);
        a2=Mod(z2;9);
        a3=Mod(z3;9);
        a4=Mod(z4;9);
        a5=Mod(z5;9);
        a6=Mod(z6;9);
        a7=Mod(z7;9);
        a8=Mod(z8;9);
        a9=Mod(z9;9);
        a1=If (z1<>0 and a1=0;a1=9;a1);
        a2=If (z2<>0 and a2=0;a2=9;a2);
        a3=If (z3<>0 and a3=0;a3=9;a3);
        a4=If (z4<>0 and a4=0;a4=9;a4);
        a5=If (z5<>0 and a5=0;a5=9;a5);
        a6=If (z6<>0 and a6=0;a6=9;a6);
        a7=If (z7<>0 and a7=0;a7=9;a7);
        a8=If (z8<>0 and a8=0;a8=9;a8);
        a9=If (z9<>0 and a9=0;a9=9;a9);
        Toplam=Mod(10-Mod(a1+a2+a3+a4+a5+a6+a7+a8+a9;10);10)
        ];
        If(check_digit=Toplam;1;0)
    )
a1=If (z1<>0 and a1=0;a1=9;a1);

bu bölümde bir sıkıntı var gibi. if koşulu sağlanırsa a1=9 mu koşuluna bakıyor ki eşit değil, o yüzden 0 döndürüyor.

şöyle olmalı;
a1=If (z1<>0 and a1=0; 9 ;a1);
doğru ya, dışarıda zaten a1 e eşitle demişim neden if içinde yine a1=9 al gibi bir mantıkla yazmışım :)
Let fonksiyonunu ilk defa kullandığım için kod üzerinde o kadar çok oynama yaptım ki gözümden kaçmış teşekkürler. Düzenleyip son halini ileteceğim.
Custom Function ile aşağıdaki şekilde bir hesaplama yaptım, doğruysa 1 yanlışsa 0 veriyor.

@Osman Hocam, Cabitaş'ın VKN'sini de doğruluyor :)
Tamam diye düşünüyorum.

Vkn(Number)=
Let ([
        z1=Mod(Middle(Number;1;1)+9;10)*512;
        z2=Mod(Middle(Number;2;1)+8;10)*256;
        z3=Mod(Middle(Number;3;1)+7;10)*128;
        z4=Mod(Middle(Number;4;1)+6;10)*64;
        z5=Mod(Middle(Number;5;1)+5;10)*32;
        z6=Mod(Middle(Number;6;1)+4;10)*16;
        z7=Mod(Middle(Number;7;1)+3;10)*8;
        z8=Mod(Middle(Number;8;1)+2;10)*4;
        z9=Mod(Middle(Number;9;1)+1;10)*2;
        check_digit=Middle(Number;10;1);
        a1=Mod(z1;9);
        a2=Mod(z2;9);
        a3=Mod(z3;9);
        a4=Mod(z4;9);
        a5=Mod(z5;9);
        a6=Mod(z6;9);
        a7=Mod(z7;9);
        a8=Mod(z8;9);
        a9=Mod(z9;9);
        a1=If (z1<>0 and a1=0;9;a1);
        a2=If (z2<>0 and a2=0;9;a2);
        a3=If (z3<>0 and a3=0;9;a3);
        a4=If (z4<>0 and a4=0;9;a4);
        a5=If (z5<>0 and a5=0;9;a5);
        a6=If (z6<>0 and a6=0;9;a6);
        a7=If (z7<>0 and a7=0;9;a7);
        a8=If (z8<>0 and a8=0;9;a8);
        a9=If (z9<>0 and a9=0;9;a9);
        Toplam=Mod(a1+a2+a3+a4+a5+a6+a7+a8+a9;10);
        Toplam=Mod(10-Toplam;10)
        ];
        If(check_digit=Toplam;1;0)
    )
...