Orta Seviye SQL Server Sql Server

SQL Server’da Vergi Kimlik No Kontrol Eden Fonksiyon

SQL Server Eğitimleri Kanalına Abone Olun

Herkese merhaba,

SQL Server’da oluşturduğunuz projelerde Vergi Kimlik Numarasının kontrolü yapmak durumunda kalabilirsiniz.

Aşağıdaki fonksiyon yardımı ile bu işlemi rahatlıkla yapabilirsiniz.

CREATE FUNCTION VergiNoKontrol
(
    @VKNO VARCHAR(10)
)
RETURNS BIT
BEGIN
    DECLARE @V_LAST_DIGIT SMALLINT,
            @V_1 SMALLINT,
            @V_2 SMALLINT,
            @V_3 SMALLINT,
            @V_4 SMALLINT,
            @V_5 SMALLINT,
            @V_6 SMALLINT,
            @V_7 SMALLINT,
            @V_8 SMALLINT,
            @V_9 SMALLINT,
            @V_11 SMALLINT,
            @V_22 SMALLINT,
            @V_33 SMALLINT,
            @V_44 SMALLINT,
            @V_55 SMALLINT,
            @V_66 SMALLINT,
            @V_77 SMALLINT,
            @V_88 SMALLINT,
            @V_99 SMALLINT,
            @TOPLAM SMALLINT,
            @R BIT;

    SET @V_1 = (CAST(SUBSTRING(@VKNO, 1, 1) AS SMALLINT) + 9) % 10;
    SET @V_2 = (CAST(SUBSTRING(@VKNO, 2, 1) AS SMALLINT) + 8) % 10;
    SET @V_3 = (CAST(SUBSTRING(@VKNO, 3, 1) AS SMALLINT) + 7) % 10;
    SET @V_4 = (CAST(SUBSTRING(@VKNO, 4, 1) AS SMALLINT) + 6) % 10;
    SET @V_5 = (CAST(SUBSTRING(@VKNO, 5, 1) AS SMALLINT) + 5) % 10;
    SET @V_6 = (CAST(SUBSTRING(@VKNO, 6, 1) AS SMALLINT) + 4) % 10;
    SET @V_7 = (CAST(SUBSTRING(@VKNO, 7, 1) AS SMALLINT) + 3) % 10;
    SET @V_8 = (CAST(SUBSTRING(@VKNO, 8, 1) AS SMALLINT) + 2) % 10;
    SET @V_9 = (CAST(SUBSTRING(@VKNO, 9, 1) AS SMALLINT) + 1) % 10;
    SET @V_LAST_DIGIT = CAST(SUBSTRING(@VKNO, 10, 1)
AS  SMALLINT);

    SET @V_11 = (@V_1 * 512) % 9;
    SET @V_22 = (@V_2 * 256) % 9;
    SET @V_33 = (@V_3 * 128) % 9;
    SET @V_44 = (@V_4 * 64) % 9;
    SET @V_55 = (@V_5 * 32) % 9;
    SET @V_66 = (@V_6 * 16) % 9;
    SET @V_77 = (@V_7 * 8) % 9;
    SET @V_88 = (@V_8 * 4) % 9;
    SET @V_99 = (@V_9 * 2) % 9;

    IF @V_1 != 0
       AND @V_11 = 0
        SET @V_11 = 9;
    IF @V_2 != 0
       AND @V_22 = 0
        SET @V_22 = 9;
    IF @V_3 != 0
       AND @V_33 = 0
        SET @V_33 = 9;
    IF @V_4 != 0
       AND @V_44 = 0
        SET @V_44 = 9;
    IF @V_5 != 0
       AND @V_55 = 0
        SET @V_55 = 9;
    IF @V_6 != 0
       AND @V_66 = 0
        SET @V_66 = 9;
    IF @V_7 != 0
       AND @V_77 = 0
        SET @V_77 = 9;
    IF @V_8 != 0
       AND @V_88 = 0
        SET @V_88 = 9;
    IF @V_9 != 0
       AND @V_99 = 0
        SET @V_99 = 9;

    SET @TOPLAM = @V_11 + @V_22 + @V_33 + @V_44 + @V_55 + @V_66 + @V_77 + @V_88 + @V_99;
    IF @TOPLAM % 10 = 0
    BEGIN
        SET @TOPLAM = 0;
    END;
    ELSE
    BEGIN
        SET @TOPLAM = (10 - (@TOPLAM % 10));
    END;

    IF @TOPLAM = @V_LAST_DIGIT
        SET @R = 1; -- DOĞRU
    ELSE
        SET @R = 0; -- YANLIŞ
    --
    RETURN @R;
END;

--Çalıştırılması

SELECT dbo.VergiNoKontrol(7348871321)

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server Eğitimleri Kanalına Abone Olun

Yazar hakkında

Yavuz Selim Kart

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever.
Grafik tasarım dünyasında Indesign'ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator'e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever.
WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever.
Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever.
Kısaca çok çalışmayı seven, azimli biriyim.

Kopyalamak Yasaktır!