FilemakerTurk, AYS Bilişim ve Beyaz.net tarafından desteklenmektedir.
Filemakerturk.com a Hoş geldiniz. FilemakerTÜRK bir yardımlaşma portalidir. Sorularınızı yazarken teknik anlamda güçlük çekiyorsanız. Telefonda bize anlatın sizin yerinize siteye biz yazalım 0532 231 07 27 Mehmet KAYA.
Filemaker Lisans İhtiyacınız için FilemakerTürk Yönetimi ile iletişime geçin
 
Alakalı Siteler:

AYS Bilişim


Cabitaş



Göksel GÖKÇE


Briandunning
 

Vkn Algoritma fm de yapılabilirmi?

+2 oy
216 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, 12 Server kategorisinde Muhteshem (40,660 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, 14 InDusTry (26,360 puan) tarafından cevaplandı
15, Ocak, 15 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, 14 Mehmet KAYA (89,250 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, 16 InDusTry (26,360 puan) tarafından cevaplandı
16, Ocak, 16 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)
    )
...